рдПрд╡рдЧреЗрдиреА
рдПрд╡рдЧреЗрд░реАрдмреЛрд░рд┐рд╕реЛрд╡ рдмреЛрд░рд┐рд╕реЛрд╡ (
рдПрдирдПрдПрдП рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреАрдЬ) рдФрд░ рдХрд┐рд░рд┐рд▓
рдЯреЛрд▓рдХрд╡ рдЯреЛрд▓рдЪреЗрд╡ (рд╕рд┐рдпрд╛рди.рдлрд┐рдиреЗрдВрд╕,
рдЯреНрд╡рд┐рдЯрд░ ) рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЖрдпрд░рди рдмреИрдВрдХ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

рд▓реЗрдЦ рд╣рдорд╛рд░реЗ рдЬреЛрдХрд░ 2017 рд╕рдореНрдореЗрд▓рди рд╕реЗ рдпреВрдЬреАрди рдФрд░ рд╕рд┐рд░рд┐рд▓ рдХреА
рд░рд┐рдкреЛрд░реНрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рд╡реАрдбрд┐рдпреЛ рдФрд░ рдкрд╛рда рдкреНрд░рддрд┐рд▓реЗрдЦ рд╣реИред
рдЬреЛрдХрд░ рд╕рдореНрдореЗрд▓рди рдХрдИ рдмреИрдВрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдпреЛрдЬрд┐рдд рд╣реИ, рддреЛ рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЬрд┐рд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХреЗ рдХрд╛рдо рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЬреЛ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рд╡рд╣ рдмреИрдВрдХ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред

рддреЛ, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдпрд░рди рдмреИрдВрдХ рдСрдл рдмреНрд░рд╛рд╡реЛрд╕ рд╕реЗ рдПрдХ рдЖрд╡реЗрджрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреИрдВрдХ рдХреЗрд╡рд▓ рдкреИрд╕реЗ рдХреЛ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рд╣реИ):
http://localhost:8080/credit\?name\=Targarian\&amount\=100
рдФрд░ рд▓реЛрд╣реЗ рдХреЗ рдмреИрдВрдХ рдореЗрдВ, рдзрди рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдмреИрдВрдХ рдХреЗ рдПрдкреАрдЖрдИ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рд╡рд╣ рд╕рд░реНрджреА рд╕реЗ рдмрдЪреЗрдЧрд╛ рдФрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдЯрд╛рд░рдЧреИрд░рд┐рдпрди рдХреЛ рдзрди рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдСрдкрд░реЗрд╢рди рд╕реНрд╡реАрдХреГрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛:

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╕реНрдЯрд╛рд░реНрдХ, рддреЛ рдирд╣реАрдВ:

рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ: рд╕реНрдЯрд╛рд░реНрдХреНрд╕ рднреА рдЕрдХреНрд╕рд░ рдорд░ рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╕рд░реНрджрд┐рдпреЛрдВ рдореЗрдВ рдЬреАрд╡рд┐рдд рдирд╣реАрдВ рд░рд╣рддрд╛ рд╣реИ рддреЛ рдзрди рдХрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреНрдпреЛрдВ рдХрд░реЗрдВ?
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдЕрдВрджрд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
@RestController @RequiredArgsConstructor public class IronBankController { private final TransferMoneyService transferMoney; private final MoneyDao moneyDao; @GetMapping("/credit") public String credit(@RequestParam String name, @RequestParam long amount) { long resultedDeposit = transferMoney.transfer(name, amount); if (resultedDeposit == -1) { return "Rejected<br/>" + name + " <b>will`t</b> survive this winter"; } return format( "<i>Credit approved for %s</i> <br/>Current bank balance: <b>%s</b>", name, resultedDeposit ); } @GetMapping("/state") public long currentState() { return moneyDao.findAll().get(0).getTotalAmount(); } }
рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд┐рдпрдВрддреНрд░рдХ рд╣реИред
рдкрд╕рдВрдж рдХреЗ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдХреМрди рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдХрд┐рд╕рдХреЛ рдЛрдг рджреЗрдирд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕рдХреЛ - рдирд╣реАрдВ? рд╕рд░рд▓ рд░реЗрдЦрд╛: рдпрджрд┐ рдЖрдкрдХрд╛ рдирд╛рдо рд╕реНрдЯрд╛рд░реНрдХ рд╣реИ, рддреЛ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рд╢реНрд╡рд╛рд╕рдШрд╛рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ - рдХрд┐рддрдирд╛ рднрд╛рдЧреНрдпрд╢рд╛рд▓реАред рд╕рд╛рдзрд╛рд░рдг рдмреИрдВрдХред
@Service public class NameBasedProphetService implements ProphetService { @Override public boolean willSurvive(String name) { return !name.contains("Stark") && ThreadLocalRandom.current().nextBoolean(); } }
рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред рдпреЗ рдХреБрдЫ рдПрдиреЛрдЯреЗрд╢рди рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрдХреБрдЫ рдмрд╣реБрдд рддреЗрдЬ рд╣реИред
рд╕рднреА рдореБрдЦреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╣рд╛рдБ рд╣реИрдВ? рдХреЗрд╡рд▓ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╣реИред рдбрд╛рдУ рдореЗрдВ, рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЦрд╛рд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред
public interface MoneyDao extends JpaRepository<Bank, String> { }
рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ - рдХреЗрд╡рд▓ рдЕрдиреБрд╡рд╛рдж рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╕реЗрд╡рд╛рдПрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЬрд╛рд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдИ рдХрдиреНрдлрд░реНрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ application.yml (рдЛрдг рдЪреБрдХрд╛рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреА рд╕реВрдЪреА) рд╣реИред рдФрд░ рдореБрдЦреНрдп рд╕рдмрд╕реЗ рдЖрдо рд╣реИ:
@SpringBootApplication @EnableConfigurationProperties(ProphetProperties.class) public class MoneyRavenApplication { public static void main(String[] args) { SpringApplication.run(MoneyRavenApplication.class, args); } }
рддреЛ рд╕рд╛рд░рд╛ рдЬрд╛рджреВ рдХрд╣рд╛рдВ рдЫрд┐рдкрд╛ рд╣реИ?
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдпреЗ рдПрдХреНрд╕рдПрдордПрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИрдВ, рдФрд░ рд╕реЛрдЪреЗрдВ рдХрд┐ рдЙрдирдХрд╛ рдЖрд╡реЗрджрди рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЖрд╡реЗрджрди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ
рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдереА рд╡рд╣ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдШрд░реНрд╖ рд╣реИред рд╣рд░ рдмрд╛рд░ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрдШрд░реНрд╖ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрдврд╝рддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдЗрдХрд╛рдИ-рдкреНрд░рдмрдВрдзрдХ, рдПрдХ рдкреНрд░рд╢реНрди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдпрд╣ рдХреБрдЫ рднреА рдЯреВрдЯ рди рдЬрд╛рдП?
рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдШрд░реНрд╖ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ (рдпрджрд┐ рд╣рдо рдРрд╕реА рдХрд┐рд╕реА рдЬрдЧрд╣ рдкрд░ рдирд╣реАрдВ рдЖрдП рд╣реИрдВ рдЬрд╣рд╛рдБ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ)?
- рдпрд╛ start.spring.io рдкрд░ рдЬрд╛рдПрдВ , рдЬреЛрд╢ рд▓рд╛рдВрдЧ рдиреЗ рд╣рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЪреЗрдХ-рдмреЙрдХреНрд╕ рджрд┐рдП рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдВ рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ;
- рдпрд╛ IntelliJ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬрд╣рд╛рдВ, рджрд┐рдЦрд╛рдИ рджрд┐рдП рдЧрдП рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╕реНрдкреНрд░рд┐рдВрдЧ рдЗрдирд┐рд╢рд┐рдПрдЯрд┐рд╡ рдореЗрдВ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЛ рд╡рд╣реАрдВ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рд╣рдо рдорд╛рд╡реЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ pom.xml рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ
spring-boot-dependencies
рдирд╛рдордХ рдПрдХ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдорд╛рддрд╛
spring-boot-dependencies
рдкрд┐рддрд╛ рд╣реИред рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдмреНрд▓реЙрдХ рд╣реЛрдЧрд╛ред
рдореИрдВ рдЕрдм рдорд╛рд╡реЗрди рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ред рд╕рд┐рд░реНрдл рджреЛ рд╢рдмреНрджред
рдирд┐рд░реНрднрд░рддрд╛-рдкреНрд░рдмрдВрдзрди рдмреНрд▓реЙрдХ рдирд┐рд░реНрднрд░рддрд╛ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдРрд╕рд╛ рдмреНрд▓реЙрдХ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЙрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЗрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдФрд░ рдЬрдм рдЖрдк рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдирд┐рд░реНрднрд░рддрд╛-рдкреНрд░рдмрдВрдзрди рдмреНрд▓реЙрдХ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдорд╛рд╡реЗрди рдпрд╣ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛-рдкреНрд░рдмрдВрдзрди рдмреНрд▓реЙрдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдорд╛рддрд╛-рдкрд┐рддрд╛ рдкреЛрдо рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдХрд╣реАрдВ рдФрд░ред рдпрд╛рдиреА рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рдПрдХ рдирдИ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП, рдореИрдВ рдЕрдм рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЗрд╕ рдЙрдореНрдореАрдж рдореЗрдВ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЗрдВ рдХрд╣реАрдВ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдпрд╣ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдВрдШрд░реНрд╖ рдкреИрджрд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣рдорд╛рд░реЗ рдирд┐рд░реНрднрд░рддрд╛-рдкреНрд░рдмрдВрдзрди рдореЗрдВ, рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд╛рдВрдЪ рд╕реМ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЗрдВрдЧрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рд╡реЗ рд╕рднреА рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред
рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ? рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реА рдХрдВрдкрдиреА рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рдЕрдкрдирд╛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╣реИред рдпрджрд┐ рдореИрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЕрдкрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рдирд╣реАрдВ рд╣реИрдВред рд╣рдо рдЕрдкрдиреЗ рдкреЛрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдмрд╛рд╣рд░ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛-рдкреНрд░рдмрдВрдзрди рдмреНрд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛-рдкреНрд░рдмрдВрдзрди рдмреНрд▓реЙрдХ рдХреЗ рдмреАрдУрдПрдо рдЖрдпрд╛рдд рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
<dependencyManagement> <dependencies> <dependency> <groupId>io.spring.platform</groupId> <artifactId>platform-bom</artifactId> <version>Brussels-SR2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
рдХреМрди рдмрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ - рд░рд┐рдкреЛрд░реНрдЯ "
рдорд╛рд╡реЗрди рдмрдирд╛рдо рдЧреНрд░реИрдбрд▓ " рджреЗрдЦреЗрдВред рд╡рд╣рд╛рдВ рдпрд╣ рд╕рдм рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ред
рдЖрдЬ, рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛-рдкреНрд░рдмрдВрдзрди рдХреЗ рдРрд╕реЗ рд╡рд┐рд╢рд╛рд▓ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛рдлреА рдлреИрд╢рдиреЗрдмрд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╡реЗ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдФрд░ рдЙрди рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕реЗ рдмрдо рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдЪреАрдЬрд╝ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдмрд┐рдирд╛ рдЖрдкрдХреЗ рдирд┐рд░реНрднрд░рддрд╛-рдкреНрд░рдмрдВрдзрди рдмреНрд▓реЙрдХ рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рдпрд╣ рдХреИрд╕реЗ рдЧреНрд░реЗрдбрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдПрдХ рд╣реА рдЪреАрдЬрд╝, рдХреЗрд╡рд▓ рдЖрд╕рд╛рди):
dependencyManagement { imports { mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Dalston.RELEASE' } }
рдЕрдм рд╣рдо рдЦреБрдж рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рдЖрд╡реЗрджрди рдореЗрдВ рдХреНрдпрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗ? рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдХреНрд╖рдорддрд╛рдПрдБ рд╣реЛрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ JPA рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдЕрдм рд╣рдореЗрдВ рддреАрди рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рдерд╛ред рдореИрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ: рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддрджрдиреБрд╕рд╛рд░ рд╕реНрдкреНрд░рд┐рдВрдЧ-рдЯреАрдПрдХреНрд╕ рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореБрдЭреЗ рдХреБрдЫ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП EntityManager, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ-рдХреЛрд░ рдпрд╛ рдХреБрдЫ рдФрд░ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рд╡рд╕рдВрдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдм рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрд╛рдд рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рджрд░реНрдЬрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ред
рдЖрдЬ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢реБрд░реБрдЖрдд рд╣реИред рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд░рдЦрддреЗ рд╣реИрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╣ рдЙрд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рд╡рд╣ рдЖрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдпрд╣ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпрд╛ рд╣реИ, рд╡реЗ рддреБрд░рдВрдд рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рдХрд░реНрдордХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВред рдпрд╛ рдпрджрд┐ рдЖрдк рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬрдкрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкрд░ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдбрд╛рд▓реЗрдВ рдФрд░ рдпрд╣ рдЙрди рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓рд╛рдПрдЧрд╛ рдЬреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬрдкрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред
рдпрд╛рдиреА рд╣рдорд╛рд░рд╛ рдкреЛрдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдЙрди 3-5 рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
'org.springframework.boot:spring-boot-starter-web' 'org.springframework.boot:spring-boot-starter-data-jpa' 'com.h2database:h2'
рдЫрдВрдЯрдиреА рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╣рдореЗрдВ рдЕрдм рдХрдо рд╕реЛрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдХреЛрдИ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдореА рдЖрдИ рд╣реИред
рдкреНрд░рд╕рдВрдЧ рд╕реЗрдЯрд┐рдВрдЧ
рдЪрд▓реЛ рдЕрдЧрд▓реЗ рджрд░реНрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдерд╛ - рд╕рдВрджрд░реНрдн рд╕реЗрдЯ рдХрд░рдирд╛ред рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреВрд░реЗ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рд╣рдордиреЗ рдпрд╛ рддреЛ рдПрдХреНрд╕рдПрдордПрд▓ рдпрд╛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рддрдерд╛рдХрдерд┐рдд рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреА рдлрд▓рд┐рдпреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ EntityManagerFactory рд╕реЗрдо рдХреА рдЬрд░реВрд░рдд рд╣реИред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рд╕реЗрдо - рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрдХ, рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд, рдЖрджрд┐ред - рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╡реЗ рд╕рднреА рд╕рдВрджрд░реНрдн рдореЗрдВ рдЧрд┐рд░ рдЧрдПред
рд╕реНрдкреНрд░рд┐рдВрдЧ рд░рд┐рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рджреМрд░рд╛рди, рд╣рдордиреЗ рдореБрдЦреНрдп рдореЗрдВ рд╕рдВрджрд░реНрдн рдмрдирд╛рдпрд╛, рдФрд░ рдЕрдЧрд░ рдпрд╣ xml рд╕рдВрджрд░реНрдн рдерд╛, рддреЛ рдпрд╣ рд╢реБрд░реВ рдореЗрдВ рдЦрд╛рд▓реА рдерд╛ред рдпрджрд┐ рд╣рдордиреЗ
AnnotationConfigApplicationContext
рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджрд░реНрдн рдмрдирд╛рдпрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рдмреАрдирдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ рдереЗ рдЬреЛ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реЗрдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рд╕рдВрджрд░реНрдн рднреА рд▓рдЧрднрдЧ рдЦрд╛рд▓реА рдерд╛ред
рдФрд░ рдЕрдм рдореБрдЦреНрдп рдореЗрдВ
SpringApplication.run
рдФрд░ рдХреЛрдИ рд╕рдВрджрд░реНрдн рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ:
@SpringBootApplilcation class App { public static void main(String[] args) { SpringApplication.run(App.class,args); } }
рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрджрд░реНрдн рд╣реИред
SpringApplication.run
рд╣рдореЗрдВ рдХреБрдЫ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИред

рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ atypical рдорд╛рдорд▓рд╛ рд╣реИред рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рдереЗ:
- рдпрджрд┐ рдпрд╣ рдПрдХ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ, рддреЛ рд╕реАрдзреЗ рдореБрдЦреНрдп рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдирдпрд╛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛,
ClassPathXmlApplicationContext
, рдЖрджрд┐ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
- рдЕрдЧрд░ рд╣рдордиреЗ рдЯреЙрдордХреИрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛, рддреЛ рдПрдХ рд╕рд░реНрд╡рд▓реЗрдЯ рдореИрдиреЗрдЬрд░ рдерд╛, рдЬреЛ рдХреБрдЫ рд╕рдореНрдореЗрд▓рдиреЛрдВ рджреНрд╡рд╛рд░рд╛, рдПрдХреНрд╕рдПрдордПрд▓ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдерд╛ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЗрд╕рд╕реЗ рдПрдХ рд╕рдВрджрд░реНрдн рдмрдирд╛рдпрд╛ред
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╕рдВрджрд░реНрдн рдХрд┐рд╕реА рднреА рддрд░рд╣ рдерд╛ред рдФрд░ рд╣рдордиреЗ рдЕрднреА рднреА рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрдХреНрд╖рд╛рдПрдВ рдкрд╛рд╕ рдХреА рд╣реИрдВред рджреНрд╡рд╛рд░рд╛ рдФрд░ рдмрдбрд╝реЗ, рд╣рдордиреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЪреБрдирд╛ред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓
SpringApplication.run
, рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рдВрджрд░реНрдн рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ
рдкрд╣реЗрд▓реА: рд╣рдо рд╡рд╣рд╛рдБ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рджрд┐рдП рдЧрдП:RipperApplication.class
publicтАж main(String[] args) { SpringApplication.run(?,args); }
рдкреНрд░рд╢реНрди: рд╡рд╣рд╛рдВ рдФрд░ рдХреНрдпрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рд╡рд┐рдХрд▓реНрдк:RipperApplication.class
String.class
"context.xml"
new ClassPathResource("context.xml")
Package.getPackage("conference.spring.boot.ripper")
рдЬрд╡рд╛рдм рд╣реИрдЙрддреНрддрд░ рд╣реИ:
рдкреНрд░рд▓реЗрдЦрди рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рд╡рд╣рд╛рдБ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо, рдпрд╣ рд╕рдВрдХрд▓рди рдХрд░реЗрдЧрд╛ рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдпрд╛рдиреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рднреА рдЙрддреНрддрд░ рд╕рд╣реА рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐
String.class
, рдФрд░ рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИред
рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдирд╣реАрдВ рдХрд╣реА рдЧрдИ рд╣реИ, рд╡рд╣ рд╣рдореЗрдВ рдХрд┐рд╕ рд░реВрдк рдореЗрдВ рднреЗрдЬрдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧреБрдкреНрдд рдЬреНрдЮрд╛рди рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рд╣реИред
SpringApplication.run(Object[] sources, String[] args) # APPLICATION SETTINGS (SpringApplication) spring.main.sources= # class name, package name, xml location spring.main.web-environment= # true/false spring.main.banner-mode=console # log/off
SpringApplication
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдЖрдЧреЗ рдХреА рд╕реНрд▓рд╛рдЗрдбреНрд╕ рдореЗрдВ рд╣рдо рдЗрд╕реЗ рдХрд╛рд░реНрд▓рд╕рди рдХреЗ рд╕рд╛рде рдХрд░реЗрдВрдЧреЗред
рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрд▓рд╕рди рдЙрд╕ рдЗрдирдкреБрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЙрд╕рдХреЗ рдкрд╛рд╕ рднреЗрдЬрддреЗ рд╣реИрдВред рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ, рд╣рдо рдЙрд╕реЗ рджреЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реЗ рдкрд╛рдВрдЪ рдЕрджреНрднреБрдд рд╡рд┐рдХрд▓реНрдк рдЬреЛ рдЖрдк
SpringApplication.run
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
RipperApplication.class
String.class
"context.xml"
new ClassPathResource("context.xml")
Package.getPackage("conference.spring.boot.ripper")
SpringApplication
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?

рдЬрдм рд╣рдордиреЗ
new
рдорд╛рдзреНрдпрдо рд╕реЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕рдВрджрд░реНрдн рдмрдирд╛рдпрд╛, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧ рдереЗ рдЬреЛ
ApplicationContext
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

рдФрд░ рдХреНрдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬрдм рдХрд╛рд░реНрд▓рд╕рди рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИ?
рдпрд╣ рдХреЗрд╡рд▓ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИ: рдпрд╛ рддреЛ рдПрдХ рд╡реЗрдм рд╕рдВрджрд░реНрдн (
WebApplicationContext
) рдпрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрджрд░реНрдн (
AnnotationConfigApplicationContext
)ред

рд╕рдВрджрд░реНрдн рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдХреНрд▓рд╛рд╕рдкрд╛рде рдореЗрдВ рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ:

рдпрд╣реА рд╣реИ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдПрдХ рд╕рдВрджрд░реНрдн рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрджрд░реНрдн рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдЧреНрд░реВрд╡реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ xml рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ; рдореИрдВ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреБрдЫ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдХреЛ рд╕реНрдХреИрди рдпрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдкреИрдХреЗрдЬ рд╣реИрдВред рдпрд╛рдиреА рдореЗрд░реЗ рдкрд╛рд╕ рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╣реИред рд╣рдордиреЗ рдЕрднреА рддрдХ рдПрдХ рднреА рдмрд┐рди рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рд╣реИ, рдПрдХ рднреА рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрд▓рд╕рди рд╣реИ -
SpringApplication.run
ред
SpringApplication.run
ред рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдкрд░, рд╡рд╣ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдПрдХ рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рджреЗрдЦреЗрдВ, рддреЛ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ, рд╢реБрд░реБрдЖрдд рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, 436 рдбрд┐рдмреНрдмреЗ рдереЗред

рд▓рдЧрднрдЧ 500 рд╕реЗрдо рдмрд╕ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЖрдЧреЗ, рд╣рдо рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ рдпреЗ рдлрд▓рд┐рдпрд╛рдБ рдХрд╣рд╛рдБ рд╕реЗ рдЖрдИрдВред
рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдРрд╕рд╛ рд╣реА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╢реБрд░реБрдЖрдд рдХрд╛ рдЬрд╛рджреВ, рд╡реНрдпрд╕рдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ 3-4 рд╢реБрд░реБрдЖрдд рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 436 рдбрд┐рдмреНрдмреЗ рд╣реИрдВред рд╣рдо 10 рд╕реНрдЯрд╛рд░реНрдЯрд░реНрд╕ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВрдЧреЗ, 1000 рд╕реЗ рдЕрдзрд┐рдХ рдбрд┐рдмреНрдмреЗ рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯрд╛рд░реНрдЯрд░, рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХ рдбрд┐рдмреНрдмреЗ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВред рдпрд╛рдиреА рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдЖрдк рд╡реЗрдм рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рд╕рд░реНрд╡рд▓реЗрдЯ рдбрд┐рд╕реНрдкреИрдЪрд░ рдФрд░
InternalResourceViewResolver
ResourceViewResolver рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо jpa рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╕реЗ рдЬреБрдбрд╝реЗ - рд╣рдореЗрдВ
EntityManagerFactory
рд╕реЗрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпреЗ рд╕рднреА рд╕реЗрдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХрд╣реАрдВ рд╣реИрдВ, рдФрд░ рд╡реЗ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдХреЛрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд┐рдП рдмрд┐рдирд╛ рдЖрд╡реЗрджрди рдкрд░ рдЖрддреЗ рд╣реИрдВред
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдЬ рд╣рдо рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬреЛ рдЗрд╕ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдбрд┐рдмреНрдмреЗ рднреА рд▓рд╛рдПрдЧрд╛ред
рдЖрдпрд░рди рд▓реЙ рез.резред рд╣рдореЗрд╢рд╛ рдПрдХ рд░реЗрд╡рди рднреЗрдЬрддреЗ рд╣реИрдВ

рдЧреНрд░рд╛рд╣рдХ рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдЖрдпрд░рди рдмреИрдВрдХ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред рдЧреНрд░рд╛рд╣рдХ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рднреА рдЖрд╡реЗрджрди рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИ, рддреЛ рдПрдХ рд░реИрд╡реЗрди рднреЗрдЬрд╛ рдЬрд╛рдП - рдЬрд╛рдирдХрд╛рд░реА рдЬреЛ рдмрдврд╝реА рд╣реИред
рдЖрдЗрдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдпрд░рди рдмреИрдВрдХ (рд▓реМрд╣ рдмреИрдВрдХ) рдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рд╣рдо рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд▓рд┐рдЦреЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╕рднреА рдЖрдпрд░рди рдмреИрдВрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рдЗрд╕ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдВрдЧреЗ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд░реЗрд╡реЗрди рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ рдХрд┐ рд╢реБрд░реБрдЖрдд рд╣рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХрд╕рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рд╣рдо рд▓рдЧрднрдЧ рдХреЛрдИ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рд╣рдо рдПрдХ рд╢реНрд░реЛрддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрджрд░реНрдн рдХреЗ рдЕрджреНрдпрддрди (рдЕрдВрддрд┐рдо рдШрдЯрдирд╛) рдХреЗ рд▓рд┐рдП рд╕реБрдирддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдПрдХ рд░реЗрд╡реЗрди рднреЗрдЬрддрд╛ рд╣реИред рд╣рдо
ContextRefreshEvent
рдХреЛ
ContextRefreshEvent
ред
public class IronListener implements ApplicationListener<ContextRefreshedEvent> { @Override public void onApplicationEvent(ContextRefreshedEvent event) { System.out.println(" ..."); } }
рд╣рдо рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╢реНрд░реЛрддрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЕрдм рддрдХ, рдХреЗрд╡рд▓ рдПрдХ рд╢реНрд░реЛрддрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХрд▓ рдЧреНрд░рд╛рд╣рдХ рдХреБрдЫ рдЕрдиреНрдп рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдорд╛рдВрдЧреЗрдЧрд╛, рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рднреА рд▓рд┐рдЦреЗрдВрдЧреЗред
@Configuration public class IronConfiguration { @Bean public RavenListener ravenListener() { return new RavenListener(); } }
рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рд╣рдорд╛рд░реЗ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрди рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдлрд┐рдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдЗрд╕ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?
рд╕рднреА рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП "рдХреБрдЫ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ" рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдЧрд░ рдореИрдВ 20 рд╢реБрд░реБрдЖрдд рдкрд░ рдирд┐рд░реНрднрд░ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ
@Enable
? рдФрд░ рдЕрдЧрд░ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдореЗрдВ рдХрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИрдВ? рдореБрдЦреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд░реНрдЧ рдХреЛ
@Enable*
рд╕рд╛рде рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдирд╡ рд╡рд░реНрд╖ рд╡реГрдХреНрд╖ рдХреИрд╕рд╛ рд╣реИ?

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрддрд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реНрдпреБрддреНрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ), рдФрд░ рдЗрд╕рдХреЗ рдЗрдВрд╕рд╛рдЗрдб рдХреЛ рдХреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо spring.factories рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рддреЛ spring.factories
рдХреНрдпрд╛ рд╣реИ
рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд╕рдВрдд рд╣реИрдВред рдРрд╕реЗ рдХрд╛рд░реНрдп рдЬрд┐рдирдореЗрдВ рдЖрдкрдХреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЙрди рдкрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╣рдорд╛рд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред рдФрд░ рдпрд╣ рд╕рдм рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬрдмрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЙрди рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреАред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рд╡реНрдпреБрддреНрдХреНрд░рдо рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред

рдЖрдЗрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрдиреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЗ рд╣рд┐рдореНрдордд рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп (рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓реЗрдВ, рдФрд░ рдпрд╣ ...), рд╕рдм рдХреБрдЫ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рдкрд░реАрдд рд╣реЛрдЧрд╛ред рд╕реНрдЯрд╛рд░реНрдЯрд░ рдореЗрдВ
рд╕реНрдкреНрд░рд┐рдВрдЧ рдирд╛рдордХ рдлрд╛рдЗрд▓
рд╣реЛрдЧреА ред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЗ рдХреМрди рд╕реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИред рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдореИрдВ рд╕рдордЭрд╛рдКрдБрдЧрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдпрд╣ рд╕рднреА рдЬрд╛рд░ рдХреЛ рд╕реНрдХреИрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ.рдлреИрдХреНрдЯрд░реАрдЬ рдлрд╝рд╛рдЗрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИред
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.ironbank.IronConfiguration
@Configuration public class IronConfiguration { @Bean public RavenListener ravenListener() { return new RavenListener(); } }
рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдм рдХрд░рдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИред
compile project(':iron-starter')
рдорд╛рд╡реЗрди рдореЗрдВ, рдЗрд╕реА рддрд░рд╣ - рдЖрдкрдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдордиреЗ рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред рд░реИрд╡реЗрди рдХреЛ рдЙрд╕ рд╕рдордп рдЙрддрд╛рд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╡рд╣ рдЙрдарддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдордиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╣рдо, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЛ рд▓рд┐рдЦрддреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдбреЗрд╡рд▓рдкрд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╣рдордиреЗ рд╕рд┐рд░реНрдл рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ - рд░реЗрд╡реЗрди рдиреЗ рдЙрдбрд╝рд╛рди рднрд░реАред рд╕рднреА рдЬреИрд╕рд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗред
рдпрд╣ рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реИред рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрд▓рдЯрд╛ рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрд┐рд╕ рддрд░рд╣ рд╡рд╕рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╡рд┐рд▓реЛрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрд▓рдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрд▓рдЯрд╛ рд╣реЛрддрд╛ рд╣реИред
@SpringBootApplication рд╕рд┐рд░ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░
рдЙрд╕ рдХреНрд╖рдг рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ рдЬрдм рд╣рдордиреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдерд╛ред рд╣рдордиреЗ
new AnnotationConfigApplicationContext
рд▓рд┐рдЦрд╛ рдФрд░ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд╛рд╕ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ рдПрдХ рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рд╕ рдерд╛ред рдЕрдм рд╣рдо
SpringApplication.run
рднреА рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдХреНрд▓рд╛рд╕ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕реЗ рдПрдХ рдФрд░ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдПрдиреЛрдЯреЗрд╢рди
@SpringBootApplication
рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреВрд░реА рджреБрдирд┐рдпрд╛ рдХреЛ рд╡рд╣рди рдХрд░рддрд╛ рд╣реИред
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication { тАж }
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдВрджрд░
@Configuration
, рдЕрд░реНрдерд╛рдд рдпрд╣ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИред рдЖрдк
@Bean
рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╕реЗрдо рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рджреВрд╕рд░реА рдмрд╛рдд,
@ComponentScan
рдЗрд╕рдХреЗ рдКрдкрд░ рдЦрдбрд╝рд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдФрд░ рдЙрдк-рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рдЖрдк рдПрдХ рд╣реА рдкреИрдХреЗрдЬ рдореЗрдВ рдпрд╛ рдЙрд╕рдХреЗ
@Service
-
@Service
рдореЗрдВ рд╕реЗрд╡рд╛рдПрдВ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ -
@Service
,
@RestController
- рд╡реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдХреИрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЦреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЖрдкрдХреА рд╕реНрдХреИрдирд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
рджрд░рдЕрд╕рд▓,
@SpringBootApplication
рдХреЛрдИ рдирдИ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдмрд╕ рдЙрди рд╕рднреА рдмреЗрд╣рддрд░реАрди рдкреНрд░рдерд╛рдУрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬреЛ рд╡рд╕рдВрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдереЗ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдм
@ComponentScan
рд╕рд╣рд┐рдд рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдПрдиреЛрдЯреЗрд╢рди рд░рдЪрдирд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрднреА рднреА рдРрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдереАрдВ -
@EnableAutoConfiguration
ред рдпрд╣ рд╡рд╣ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ.рдлреИрдХреНрдЯрд░реАрдЬ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
@EnableAutoConfiguration
, рдпрджрд┐ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рд╕рд╛рде
@Import
рдХрд░реЗрдВ:
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import({EnableAutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class<?>[] exclude() default {}; String[] excludeName() default {}; }
@EnableAutoConfiguration
рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рд╣рдореЗрдВ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╕реЗ рдХреБрдЫ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рд╣рдо рдХреЗрд╡рд▓ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдкрдХреЛ рдЗрд╕ рд╡рд░реНрдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣
ImportSelector
рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдирд┐рдпрдорд┐рдд рд╡рд╕рдВрдд рдореЗрдВ, рд╣рдо
Import(Some Configuration.class)
рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЕрдкрдиреЗ рд╕рднреА рдЖрд╢реНрд░рд┐рддреЛрдВ рдХреА рддрд░рд╣ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИред рдпрд╣
ImportSelector
, рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╣реАрдВ рд╣реИред
ImportSelector
рд╣рдорд╛рд░реЗ рд╕рднреА рд╢реБрд░реБрдЖрдд рдХреЛ рд╕рдВрджрд░реНрдн рдореЗрдВ
ImportSelector
рд╣реИред рдпрд╣
@EnableAutoConfiguration
рд╕реЗ
@EnableAutoConfiguration
рдПрдиреЛрдЯреЗрд╢рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрди рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдЖрдпрд░рдирдХреЛрдирдлрд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред

рд╡рд╣ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдПрдХ рд╕реАрдзреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд░реНрдЧ, рд╕реНрдкреНрд░рд┐рдВрдЧрдлреИрдХреНрдЯрд░реАрдЬрд▓реЙрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдкрд╛рд╕ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВред

рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреИрдХреНрдЯреНрд░реА рд▓реЛрдбрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ 3.2 рдореЗрдВ рдореМрдЬреВрдж рдерд╛, рдмрд╕ рдХрд┐рд╕реА рдиреЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдЖ, рдЬрд╣рд╛рдВ рд╕реНрдкреНрд░рд┐рдВрдЧ.рдлреИрдХреНрдЯрд░реАрдЬ рдХрдиреНрд╡реЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрдВрддреНрд░ рд╣реИрдВред рд╣рдо рдЖрдЧреЗ рджрд┐рдЦрд╛рдПрдВрдЧреЗ рдХрд┐, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╡рд╕рдВрдд рдореЗрдВ рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ редfactories - рд╢реНрд░реЛрддрд╛, рдЕрд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЛрд╕реЗрд╕рд░, рдЖрджрд┐ред
static <T> List<T> loadFactories( Class<T> factoryClass, ClassLoader cl ) static List<String> loadFactoryNames( Class<?> factoryClass, ClassLoader cl )
рдпрд╣ рдХреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рдЙрд▓рдЯрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЦреБрд▓реЗ рдмрдВрдж рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣рд░ рдмрд╛рд░ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдХреБрдЫ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЛрдВ рдХреЛ рд╡рд╣рди рдХрд░рддрд╛ рд╣реИ (рдЕрдм рддрдХ рд╣рдо рдХреЗрд╡рд▓ рдЙрди рд╡рд┐рдиреНрдпрд╛рд╕реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рд╡рд╣рди рдХрд░рддреЗ рд╣реИрдВ)ред рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреА рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕рдХреА рдорджрдж рд╕реЗ, рд╡рд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрдВрддреНрд░ рд╣реИрдВ рдЬреЛ рд╕рднреА рд╢реБрд░реБрдЖрдд рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИрдВ рдЬреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИредрд▓реЗрдХрд┐рди рдЗрд╕ рдкреВрд░реА рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИред рдпрджрд┐ рд╣рдо рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЧ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╢реБрд░реБрдЖрдд рдХреА рдЗрд╕ рдкреВрд░реА рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЖрдП рд▓реЛрдЧ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЙрдирдХреА рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ org.springframework.boot:spring-boot-autoconfigure
, META-INF / spring.factories рдХреЗ рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИEnableAutoConfiguration
, рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИрдВ (рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдерд╛, рддреЛ рд▓рдЧрднрдЧ 80 рдЕрд╕рдВрдмрджреНрдз рдСрдЯреЛрдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдереЗ)ред spring-boot-autoconfigure.jar/spring.factories</b> org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\ org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\ org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\ org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration.\ ...
рдпрд╣реА рд╣реИ, рдЪрд╛рд╣реЗ рдореИрдВ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛ рдпрд╛ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реБрдЖ рд╣реЛ, рдЬрдм рдореИрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╣рдореЗрд╢рд╛ рдЬрд╛рд░-рдПрд╕ (рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХрд╛ рдЬрд╛рд░) рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕реНрдкреНрд░рд┐рдВрдЧ.рдлреИрдХреНрдЯрд░реАрдЬ рд╣реЛрддреА рд╣реИрдВ, рдЬрд╣рд╛рдВ 90 рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдХрдИ рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП CacheAutoConfiguration
, рдмрд╕ рдРрд╕реА рдЪреАрдЬрд╝ рдЬрд┐рд╕рдореЗрдВ - рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣рдо рджреВрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ: for (int i = 0; i < types.length; i++) { Imports[i] = CacheConfigurations.getConfigurationClass(types[i]); } return imports;
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддрдм рдХреБрдЫ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╡рд╣рд╛рдВ рдХреА рдХрдХреНрд╖рд╛ рд╕реЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдЬреЛ рдЗрд╕ рд╕реНрдкреНрд░рд┐рдВрдЧ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ редfactories) рдЗрд╕ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдвреВрдВрдврдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред private static final Map<CacheType, Class<?>> MAPPINGS; static { Map<CacheType, Class<?>> mappings = new HashMap<CacheType, Class<?>>(); mappings.put(CacheType.GENERIC, GenericCacheConfiguration.class); mappings.put(CacheType.EHCACHE, EhCacheCacheConfiguration.class); mappings.put(CacheType.HAZELCAST, HazelcastCacheConfiguration.class); mappings.put(CacheType.INFINISPAN, InfinispanCacheConfiguration.class); mappings.put(CacheType.JCACHE, JCacheCacheConfiguration.class); mappings.put(CacheType.COUCHBASE, CouchbaseCacheConfiguration.class); mappings.put(CacheType.REDIS, RedisCacheConfiguration.class); mappings.put(CacheType.CAFFEINE, CaffeineCacheConfiguration.class); addGuavaMapping(mappings); mappings.put(CacheType.SIMPLE, SimpleCacheConfiguration.class); mappings.put(CacheType.NONE, NoOpCacheConfiguration.class); MAPPINGS = Collections.unmodifiableMap(mappings); }
рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдмреВрдЯ рд╕реНрдЯреЗрдЬ рдкрд░ рд╡реЗ рд╕рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреВрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред
рд╡реЗ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди:
рдЕрдВрддрд░рд┐рдо рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ - рдЕрдЪреНрдЫрд╛, рджрдпрд╛рд▓реБ, рд╕рд╣реА рд╢реБрд░реБрдЖрдд, рдЬреЛ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдЙрд▓рдЯрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЦреБрд▓реЗ рдмрдВрдж рд╕рд┐рджреНрдзрд╛рдВрдд - рдЕрдкрдиреЗ рд╡рд╕рдВрдд рдХреЛ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реЗ рдХрд╛рд░реНрдп рдЬрд┐рдирдореЗрдВ рдЙрдирдХреА рд╣рд┐рдореНрдордд рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИред рд╣рдо рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВрдЧреЗ; рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╣рдо рдЕрдиреНрдпрдерд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗредрдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрд╡рдпрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдПрдХ рдФрд░ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрд╢рд╛ рд▓реЛрдб рд╣реЛрддреЗ рд╣реИрдВ - рдЙрдирдореЗрдВ рд╕реЗ 90 рдЕрдзрд┐рдХ рд╣реИрдВред 30 рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рднреА рд╣реИрдВ рдЬреЛ рдмрд╕ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВредрдпрд╣ рдкреВрд░реА рдмрд╛рдд рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд┐рд▓реНрдЯрд░ рд╣реЛрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВред 2013 рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдЖрдИ рдереАрд╕реНрдкреНрд░рд┐рдВрдЧ 4 рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ @Conditional
, рдЬреЛ рдЗрд╕рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рд╢рд░реНрддреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВ true
рдпрд╛ false
ред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдлрд▓рд┐рдпрд╛рдВ рдпрд╛ рддреЛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдЪреВрдВрдХрд┐ рд╡рд╕рдВрдд рдореЗрдВ рдЬрд╛рд╡рд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рднреА рдПрдХ рд╕реЗрдо рд╣реИ, рдЖрдк рд╡рд╣рд╛рдВ рд╡рд┐рднрд┐рдиреНрди рд╕рд╢рд░реНрдд рд╕реЗрдЯ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╕рд╢рд░реНрдд рд░рд┐рдЯрд░реНрди рдорд┐рд▓рддрд╛ рд╣реИ false
, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрд▓реЗрдХрд┐рди рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВредрдЖрдпрд░рди рд▓реЙ 1.2ред рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХреЗрд╡рд▓ рд░реЗрд╡реЗрди
рдЧреНрд░рд╛рд╣рдХ рдХреА рдПрдХ рдирдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд░реЗрд╡реЗрди рдПрдХ рдорд╣рдВрдЧреА рдЪреАрдЬ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рддрднреА рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрддреНрдкрд╛рджрди рдмрдврд╝ рдЧрдпрд╛ рд╣реИред
рддрджрдиреБрд╕рд╛рд░, рд╢реНрд░реЛрддрд╛ рдЬреЛ рдХреМрд╡рд╛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪрд▓реЛ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВредрд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ: @Configuration <b>@ConditionalOnProduction</b> public class IronConfiguration { @Bean public RavenListener ravenListener() { return new RavenListener(); } }
рд╣рдо рдХреИрд╕реЗ рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЙрддреНрдкрд╛рджрди рд╣реИ рдпрд╛ рдирд╣реАрдВ? рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдЬреАрдм рдХрдВрдкрдиреА рдереА рдЬрд┐рд╕рдиреЗ рдХрд╣рд╛ рдерд╛: "рдЕрдЧрд░ рд╡рд┐рдВрдбреЛрдЬ рдорд╢реАрди рдкрд░ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╡рд┐рдВрдбреЛрдЬ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЙрддреНрдкрд╛рджрдиред" рд╕рдмрдХреА рдЕрдкрдиреА-рдЕрдкрдиреА рд╢рд░реНрдд рд╣реИредрд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдпрд░рди рдмреИрдВрдХ рдиреЗ рдХрд╣рд╛ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рдЬрдм рд╕реЗрд╡рд╛ рдКрдкрд░ рдЬрд╛рддреА рд╣реИ, рддреЛ рдПрдХ рдкреЙрдк-рдЕрдк рдХреЛ рдкреЙрдк рдЕрдк рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: "рдЙрддреНрдкрд╛рджрди рдпрд╛ рдирд╣реАрдВред" рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдореЗрдВ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред @Retention(RUNTIME) @Conditional(OnProductionCondition.class) public @interface ConditionalOnProduction { }
рд╣рдо рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ рдкреЛрдк рдмрдирд╛рддреЗ рд╣реИрдВ: public class OnProductionCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { return JOptionPane.showConfirmDialog(parentComponent: null, " ?") == 0; } }
рдЪрд▓реЛ рдЗрд╕реЗ рдЖрдЬрдорд╛рдПрдБред
рд╣рдо рд╕реЗрд╡рд╛ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рдЦрд┐рдбрд╝рдХреА рдореЗрдВ рд╣рд╛рдБ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд░реЗрд╡реЗрди рдордХреНрдЦрд┐рдпреЛрдВ (рдПрдХ рд╢реНрд░реЛрддрд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)редрд╣рдо рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЙрддреНрддрд░ рджреЗрддреЗ рд╣реИрдВ, рд░рд╛рд╡реЗрди рдирд╣реАрдВ рдЙрдбрд╝рддрд╛ рд╣реИредрдЗрд╕рд▓рд┐рдП, рдПрдиреЛрдЯреЗрд╢рди @Conditional(OnProductionCondition.class)
рдХреЗрд╡рд▓ рдЙрд╕ рд╡рд░реНрдЧ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рд╡рд╛рдкрд╕ рдЖрдиреА рдЪрд╛рд╣рд┐рдП true
рдпрд╛ false
ред рдРрд╕реЗ рдПрдпрд░ рдХрдВрдбреАрд╢рдирд┐рдВрдЧ рдХрд╛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрд╣реБрдд рдЧрддрд┐рд╢реАрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╣ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредPazzler
рддреЛ @ConditionalOnProduction
рд╣рдордиреЗ рд▓рд┐рдЦрд╛ред рд╣рдо рдХрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╢рд░реНрдд рдкрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реА рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рд╣реИ рдФрд░ рдпрд╣ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ - рдЬреИрд╕реЗ @ConditionalOnProduction
ред рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 15 рд╕реЗрдо рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛редрдкреНрд░рд╢реНрди: рдпрд╣ рддрд░реНрдХ рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрддреНрдкрд╛рджрди рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕реЗ рдХрд┐рддрдиреА рдмрд╛рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?рдХреНрдпрд╛ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИ? рдЦреИрд░, рд╢рд╛рдпрдж рдпрд╣ рддрд░реНрдХ рдорд╣рдВрдЧрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рд╕рдордп рдкреИрд╕рд╛ рд╣реИредрдЪрд┐рддреНрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЖрдП: @Configuration @ConditionalOn public class UndeadArmyConfiguration { ... } @Configuration public class DragonIslandConfiguration { @Bean @ConditionalOn public DragonGlassFactory dragonGlassFactory() { return new DragonGlassFactory(); } ... }
рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдбрд┐рдмреНрдмреЗ рд╣реИрдВ: рдПрдХ рдирд┐рдпрдорд┐рдд, рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред рджреЛрдиреЛрдВ рдХреЛ рд╕рд╢рд░реНрдд рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рддрднреА рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИ рдЬрдм рд╕рд░реНрджреА рдЖ рдЧрдИ рд╣реЛредрдПрдиреЛрдЯреЗрд╢рди рдХреА рд▓рд╛рдЧрдд рджреЛ рдЧреБрдирд╛ рд╣реИред рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдореМрд╕рдо рдХреЗрдВрджреНрд░ рдХреЗ рд▓рд┐рдП рд╣рд░ рдХреЙрд▓ рдорд╣рдВрдЧрд╛ рд╣реИ - рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░ рдмрд╛рд░ рдкреИрд╕рд╛ рджреЗрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореМрд╕рдо рдХреНрдпрд╛ рд╣реИред
рдпрджрд┐ рдпрд╣ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рддрд░реНрдХ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ (рдЕрд░реНрдерд╛рдд, OnProductionCondition.class
рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдВрдбреЛ рдПрдХ рдмрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА - рдЙрддреНрдкрд╛рджрди рдпрд╛ рдирд╣реАрдВ)ред рд▓рдЧрд╛рддрд╛рд░ рдХрд╛рдо рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рдХреБрдЫ рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рдФрд░ рдмреАрди рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд░ рдЗрди 5 рд╕реЗрдХрдВрдб рдореЗрдВ рд╕рд░реНрджреА рдЖ рдЬрд╛рдП рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?рд╕рд╣реА рдЙрддреНрддрд░рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ - 300 рдпрд╛ 400. рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреВрд░рд╛ рдЦреЗрд▓ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИред рд╣рдордиреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЖрд╕-рдкрд╛рд╕ рдЦрдбрд╝реЗ рд░рд╣реЗред рдпрд╣ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реИредрд╕реНрдерд┐рддрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред рдпрджрд┐ рд╣рд╛рд▓рдд рдКрдкрд░ рдХреА рдХрдХреНрд╖рд╛ рд╕реЗ рдКрдкрд░ рд╣реИ (рд╡рд░реНрдЧ @Component
, @Configuration
рдпрд╛ @Service
рд╕реНрдерд┐рддрд┐ рднреА рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реИ), рддреЛ рдпрд╣ рдРрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рди рдХреЗ рд▓рд┐рдП рддреАрди рдмрд╛рд░ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрд░ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИ, рддреЛ рджреЛ рдмрд╛рд░ред @Configuration @ConditionalOn public class UndeadArmyConfiguration { ... }
рдпрджрд┐ рдмрд┐рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЕрдВрджрд░ рдкрдВрдЬреАрдХреГрдд рд╣реИ, рддреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдмрд╛рд░ред @Configuration public class DragonIslandConfiguration { @Bean @ConditionalOn public DragonGlassFactory dragonGlassFactory() { return new DragonGlassFactory(); } ... }
рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдкрд╣реЗрд▓реА рдХрд╛ рд╕рдЯреАрдХ рдЙрддреНрддрд░ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╣рд╛рдБ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИ, рддреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рджреЛ рдмрд╛рд░ рдХрд╛рдо рдХрд░реЗрдЧреА, рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд┐рди рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдПрдХ рдмрд╛рд░ рдХрд╛рдо рдХрд░реЗрдЧреА, рд╣рдореЗрдВ 300 рдорд┐рд▓реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдпрджрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рддреАрди рдмрд╛рд░ рд╢реБрд░реВ рд╣реЛрдЧреА, рд╕рд╛рде рд╣реА рдмрд┐рди рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕рдордпред ред рд╣рдореЗрдВ 400 рдорд┐рд▓рддреЗ рд╣реИрдВредрд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рдпрд╣ рдХреИрд╕реЗ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ? рдФрд░ рдореЗрд░рд╛ рдЬрд╡рд╛рдм рдХреЗрд╡рд▓ рдпрд╣ рд╣реИ:
рдпрд╣ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ: рдЬрдм рдЖрдк рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдПрдиреЛрдЯреЗрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдФрд░ рдПрдХ рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рддрд╛рдХрд┐ рддрд░реНрдХ рдХреЛ рдХрдИ рдмрд╛рд░ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рднрд▓реЗ рд╣реА рдЖрдкрдиреЗ рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдПрдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рддрд░реНрдХ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛редрдЖрдпрд░рди рд▓реЙ 1.3ред рд░реЗрд╡реЗрди рдкрд░
рд╣рдо рдЕрдкрдиреЗ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рд░реИрд╡реЗрди рдХреА рдЙрдбрд╝рд╛рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХрд┐рд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдо рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ? рд╢реБрд░реБрдЖрдд рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рд▓рд╛рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗрдо рд╣реЛрддреЗ рд╣реИрдВред рдЗрди рдлрд▓рд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрджрд┐ рдХрд╣рд╛рдВ рдорд┐рд▓рддреЗ рд╣реИрдВред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЙрдирдХреЗ рдкрд╛рд╕ рд╕рднреА рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЪреВрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ? рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: application.properties
рдФрд░ application.yml
ред рд╡рд╣рд╛рдВ рдЖрдк рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрднреА рднреА рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ IDEA рдореЗрдВ рд╕реНрд╡рдд: рдкреВрд░реНрдг рд╣реЛрдВрдЧреАредрдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЛ рдмрджрддрд░ рдмрдирд╛рддрд╛ рд╣реИ? рдЬреЛ рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рднреА рдмрддрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреМрд╡рд╛ рдХрд┐рд╕ рдкрддреЗ рдкрд░ рдЙрдбрд╝ рд░рд╣рд╛ рд╣реИ - рд╣рдореЗрдВ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓рд╛ рд╣реИредрджреВрд╕рд░реЗ, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╢реНрд░реЛрддрд╛ рдкреИрджрд╛ рди рд╣реЛрдВ рдФрд░ рд░реИрд╡рди рдХреЛ рди рднреЗрдЬрд╛ рдЬрд╛рдП рдпрджрд┐ рд╡реНрдпрдХреНрддрд┐ рдиреЗ рдкрддреЗ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдП рд╣реИрдВред рд╣рдореЗрдВ рдПрдХ рд╢реНрд░реЛрддрд╛ рдЬреЛ рд░рд╡реАрди рднреЗрдЬрддрд╛ рд╣реИ, рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рд░реНрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╛рдиреА
рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд░реИрд╡реЗрди рдХреЛ рдХрд╣рд╛рдВ рдЙрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдмрд╕ рдПрдХ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдФрд░ рддреАрд╕рд░рд╛ - рд╣рдо рд╕реНрд╡рдд: рдкреВрд░реНрдг рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ рд╣рдорд╛рд░реЗ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЛ рдЕрдкрдиреЗ рдкрд╛рд╕ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛, рдЙрдиреНрд╣реЗрдВ рдЙрди рд╕рднреА рдЧреБрдгреЛрдВ рдкрд░ рдкреНрд░рд╢рдВрд╕рд╛ рдорд┐рд▓реЗ, рдЬреЛ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкрдврд╝рддрд╛ рд╣реИредрдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╢рд╛рдпрдж рдХреБрдЫ рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛? @ConditionalOnBean @ConditionalOnClass @ConditionalOnCloudPlatform @ConditionalOnExpression @ConditionalOnJava @ConditionalOnJndi @ConditionalOnMissingBean @ConditionalOnMissingClass @ConditionalOnNotWebApplication @ConditionalOnProperty @ConditionalOnResource @ConditionalOnSingleCandidate @ConditionalOnWebApplication ...
рджрд░рдЕрд╕рд▓, рдпрд╣рд╛рдВ рдРрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдВрдЧреАред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ @ConditionalOnProperty
ред рдпрд╣ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреБрдЫ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рд╣реИ рддреЛ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЗрд╕реА рддрд░рд╣, рд╣рдореЗрдВ @ConfigurationalProperty
рдПрдХ рд╕реНрд╡рдд: рдкреВрд░реНрдг рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛редAvtokomplit
рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рднреА рдЧреБрдг рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рд╣реЛрдиреЗ рд▓рдЧреЗрдВред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рди рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рдд: рдкреВрд░реНрдг рд╣реЛрдЧрд╛ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдЧрд╛ред рдмрд▓реНрдХрд┐, рд╣рдорд╛рд░реЗ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдореЗрдВ рднреАредрдЪрд▓реЛ рд╣рдорд╛рд░реА рд╕рдВрдкрддреНрддрд┐ "рд░реИрд╡реЗрди" рдХрд╣рддреЗ рд╣реИрдВред рдЙрд╕реЗ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд╣рд╛рдВ рдЙрдбрд╝рдирд╛ рд╣реИред @ConfigurationProperties("") public class RavenProperties { List<String> ; }
рдЖрдИрдбреАрдИрдП рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рдЧрд▓рдд рд╣реИ:
рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рдЬреЛрдбрд╝реА рд╣реИ (рдорд╛рд╡реЗрди рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдмрдЯрди "рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ")ред рдмрд╕ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред subproject { dependencies { compileOnly 'org.springframework.boot:spring-boot-configuration-processor' compile 'org.springframework.boot: spring-boot-starter' } }
рдЕрдм, IDEA рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдм рдХреБрдЫ рд╣реИредрдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдордиреЗ рдХрд┐рд╕ рддрд░рд╣ рдХреА рд▓рдд рд▓рдЧрд╛рдИ рд╣реИред рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдПрдиреЛрдЯреЗрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреНрдпрд╛ рд╣реИред рдПрдХ рд╕рд░рд▓реАрдХреГрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдРрд╕реА рдЪреАрдЬ рд╣реИ рдЬреЛ рд╕рдВрдХрд▓рди рдХреЗ рд╕реНрддрд░ рдкрд░ рдХреБрдЫ рдХрд░ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЛрдореНрдмреЛрдХ рдХрд╛ рдЕрдкрдирд╛ рдПрдиреЛрдЯреЗрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реИ, рдЬреЛ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдкрдпреЛрдЧреА рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ - рдмрд╕рдиреЗ рд╡рд╛рд▓рд╛, рдЧреЗрдЯрд░реНрд╕редрд╕рдВрдкрддреНрддрд┐ рдкрд░ рдСрдЯреЛрдХреЙрдордкреНрд▓реЗрдЯ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИ рдЬреЛ рдЖрд╡реЗрджрди рдЧреБрдгреЛрдВ рдореЗрдВ рд╣реИрдВ? рдПрдХ JSON рдлрд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде IDEA рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЙрди рд╕рднреА рдЧреБрдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдЬреЛ IDEA рдХреЛ рдСрдЯреЛ-рдХрдВрдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдЙрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЗ рд▓рд┐рдП рд▓реЗрдХрд░ рдЖрдП рд╣реИрдВ, рддреЛ рдЖрдИрдбрд┐рдпрд╛ рдСрдЯреЛ-рдХрдВрдкрд╛рдЗрд▓ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:- рдЖрдк рд╕реНрд╡рдпрдВ рдЗрд╕ JSON рдореЗрдВ рд╕реНрд╡рдпрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ;
- рдЖрдк рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╕реЗ рдПрдиреЛрдЯреЗрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрдХрд▓рди рд╕реНрддрд░ рдкрд░ рдЦреБрдж JSON рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЧреБрдг рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдореИрдЬрд┐рдХ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдПрдиреЛрдЯреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрдкрддреНрддрд┐ рдзрд╛рд░рдХ рд╣реИрдВред рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ, рдПрдиреЛрдЯреЗрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдореЗрдВ рд╕рднреА рд╡рд░реНрдЧ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
@ConfigurationalProperties
, рдЙрдирд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ JSON рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╣рд░ рдХреЛрдИ рдЬреЛ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ рдЙрд╕реЗ рдЙрдкрд╣рд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ JSON рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред
рдЖрдкрдХреЛ рдпрд╣ рднреА рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ @EnableConfigurationProperties
рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рд╕реЗрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред @Configuration @EnableConfigurationProperties(RavenProperties.class) public class IronConfiguration { @Bean @ConditionalOnProduction public RavenListener ravenListener() { return new RavenListener(); } }
рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдмрд╛рдХреА рдмреАрдиреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдИ рджреЗ (рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдХреА рд╕реЗрдо рдЕрдкрдиреА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЦреБрдж рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ)редрдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рджреЛ рдПрдиреЛрдЯреЗрд╢рди рдбрд╛рд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛:@EnableConfigurationProperties
рдЬрд┐рдирдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдХреЗ;
@ConfigurationalProperties
рдХреНрдпрд╛ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдмрддрд╛ рд░рд╣рд╛ рд╣реВрдБред
рдФрд░ рдПрдХ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ рдХреЛ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЪрдврд╝рддреА рдирд╣реАрдВ рд╣реИредрдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╛рдЗрд▓ рд╣реИ рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХреЛ рднреА рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред { "hints": [], "groups": [ { "sourceType": "com.ironbank.RavenProperties", "name": "", "type": "com.ironbankRavenProperties" } ], "properties": [ { "sourceType": "com.ironbank.RavenProperties", "name": ".", "type": "java.util.List<java.lang.String>" } ] }
рд░реИрд╡реЗрди рдХреЗ рд▓рд┐рдП рдкрддрд╛
рд╣рдордиреЗ рдХрд╛рд░реНрдп рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдХрд┐рдпрд╛ - рд╣рдореЗрдВ рдХреБрдЫ рдЧреБрдг рдорд┐рд▓реЗред рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдЗрди рдЧреБрдгреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред рдЕрдм рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рд╢реНрд░реЛрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд░реНрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред @Configuration @EnableConfigurationProperties(RavenProperties.class) public class IronConfiguration { @Bean @ConditionalOnProduction @ConditionalOnProperty(".") public RavenListener ravenListener() { return new RavenListener(); } }
рд╣рдордиреЗ рдПрдХ рдФрд░ рд╢рд░реНрдд рдЬреЛрдбрд╝реА - рдПрдХ рд░реЗрд╡реЗрди рдХреЗрд╡рд▓ рдЗрд╕ рд╢рд░реНрдд рдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд╣реАрдВ рдХрд┐рд╕реА рдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдХрд╣рд╛рдВ рдЙрдбрд╝рдирд╛ рд╣реИредрдЕрдм рд╣рдо рд▓рд┐рдЦреЗрдВрдЧреЗ рдХрд┐ рдХрд╣рд╛рдВ рдкрд░ рдЖрд╡реЗрджрди рдХрд░рдирд╛ рд╣реИред spring: application.name: money-raven jpa.hibernate.ddl-auto: validate ironbank: ---: - : -: , : true
рдпрд╣ рддрд░реНрдХ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░рд╣рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЙрдбрд╝рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЙрд╕реЗ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛редрдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЗрдВрдЬреЗрдХреНрд╢рди рд╣реИ - рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рд╣реИред рдпреВрдЬреАрди @Autowired
рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╕рдм рдХреБрдЫ рдкреНрд░рдХрдЯ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрди рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИ рдЬреЛ рд╡рд╕рдВрдд рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: @RequiredArgsConstructor public class RavenListener implements ApplicationListener<ContextRefreshedEvent>{ private final RavenProperties ravenProperties; @Override public void onApplicationEvent(ContextRefreshedEvent event) { ravenProperties.get().forEach(s -> { System.out.println(" тАж " + s); }); } }
рд▓реЗрдХрд┐рди рдпрд╣ рдлреНрд░реА рдирд╣реАрдВ рд╣реИред рдПрдХ рдУрд░ рдЖрдкрдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИ, рджреВрд╕рд░реА рдУрд░ рдЖрдкрдХреЛ рдХреБрдЫ рдмрд╡рд╛рд╕реАрд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред @Configuration @EnableConfigurationProperties(RavenProperties.class) public class IronConfiguration { @Bean @ConditionalOnProduction @ConditionalOnProperty(".") public RavenListener ravenListener(RavenProperties r) { return new RavenListener(r); } }
рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рд╣реИ @Aurowired
, рд╕реНрдкреНрд░рд┐рдВрдЧ 4.3 рдХреЗ рд╕рд╛рде рдЖрдк рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрджрд┐ рдПрдХ рдПрдХрд▓ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╣реИ @Aurowired
ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ @RequiredArgsConstructor
, рдЬреЛ рдПрдХ рдПрдХрд▓ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ: public class RavenListener implements ApplicationListener<ContextRefreshedEvent>{ private final RavenProperties ravenProperties; public RavenListener(RavenProperties ravenProperties) { this.ravenProperties = ravenProperties; } public void onApplicationEvent(ContextRefreshedEvent event) { ravenProperties.get().forEach(s -> { System.out.println(" тАж " + s); }); } }
рд╕реНрдкреНрд░рд┐рдВрдЧ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдпрд╛ рд▓реЛрдореНрдмреЛрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИред Jurgen Holler, рдЬреЛ 2002 рдХреЗ рдмрд╛рдж рд╕реЗ 80% рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛрдб рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдЖрдкрдХреЛ @Aurowired
рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рджрд┐рдЦрд╛рдИ рджреЗ (рдЕрдиреНрдпрдерд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдХрд┐рд╕реА рднреА рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЛ рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ)ред public class RavenListener implements ApplicationListener<ContextRefreshedEvent>{ private final RavenProperties ravenProperties; @Aurowired public RavenListener(RavenProperties ravenProperties) { this.ravenProperties = ravenProperties; } public void onApplicationEvent(ContextRefreshedEvent event) { ravenProperties.get().forEach(s -> { System.out.println(" тАж " + s); }); } }
рд╣рдордиреЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХреИрд╕реЗ рдХрд┐рдпрд╛? рд╣рдореЗрдВ RavenProperties
рдЬрд╛рд╡рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛ ред рдФрд░ рдЕрдЧрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ @Aurowired
рдореИрджрд╛рди рдкрд░ рд░рдЦрд╛ , рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛редрддреЛ, рдХреМрд╡реЗ рдХреЛ рдмрд╛рд╣рд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдордиреЗ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдиреЗ рд╣рдорд╛рд░реЗ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рддрд╛рд░реАрдл рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рдпрд╛, рдЬрдмрдХрд┐ рд╣рдореЗрдВ рдПрдХ рдмрд┐рди рдорд┐рд▓рд╛ рдЬреЛ рдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рд╣реЛрддрд╛ рд╣реИредрд▓реЛрд╣реЗ рдХрд╛ рдирд┐рдпрдо рез.рекред рдХрд╕реНрдЯрдо рд░реИрд╡реЗрди
рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рдХрд╛рд▓рд╛ рд░рд╛рд╡реЗрди рд╣реИред рдФрд░ рд╣рдореЗрдВ рдПрдХ рд╕рдлреЗрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдзреВрдореНрд░рдкрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд▓реЛрдЧ рдХреНрд╖рд┐рддрд┐рдЬ рдкрд░ рдзреБрдЖрдВ рджреЗрдЦреЗрдВредрдЖрдЗрдП, рд░реВрдкрдХ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдХреА рдУрд░ рдмрдврд╝реЗрдВред рд╕реНрдЯрд╛рд░реНрдЯрд░ рдиреЗ рдореБрдЭреЗ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдмреАрдиреНрд╕ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рджрд┐рдпрд╛, рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдореИрдВ рдЖрд╡реЗрджрди рдЧреБрдгреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЧрдпрд╛, рдФрд░ рд╡рд╣рд╛рдВ рдХреБрдЫ рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░ рдЕрдм рдореБрдЭреЗ рд╕рдм рдХреБрдЫ рдкрд╕рдВрдж рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ рдЬрдм рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЗрддрдиреА рдЬрдЯрд┐рд▓ рд╣реЛрддреА рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрд╡реЗрджрди рдЧреБрдгреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд╕рдХреЗред рдпрд╣реА рд╣реИ, рд╣рдо рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдмрд┐рди рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЛ рдЦреБрдж рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддрдм рдХреНрдпрд╛ рд╣реЛрдЧрд╛?рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдХреБрдЫ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛, рдФрд░ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдиреЗ рдореБрдЭреЗ рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд▓рд╛рдпрд╛ред рдХреНрдпрд╛ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдм рджреЛ рд╣реИрдВ? рдпрд╛ рдПрдХ рдХреЛ рдХреБрдЪрд▓ рджреЗрдЧрд╛ (рдФрд░ рдХреМрди рд╕рд╛?)рд╣рдо рдЖрдкрдХреЛ рдПрдХ рдФрд░ рд╢рд░реНрдд рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмрд┐рди рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдИ рдмрд┐рди рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдиреИрдЯрд┐рд╡ рд╣реИредрд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдИ рдЧрдИ рд╢рд░реНрддреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИ: @ConditionalOnBean @ConditionalOnClass @ConditionalOnCloudPlatform @ConditionalOnExpression @ConditionalOnJava @ConditionalOnJndi @ConditionalOnMissingBean @ConditionalOnMissingClass @ConditionalOnNotWebApplication @ConditionalOnProperty @ConditionalOnResource @ConditionalOnSingleCandidate @ConditionalOnWebApplication ...
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, @ConditionalOnMissingBean
рд╡рд╣рд╛рдБ рднреА рд╣реИ, рддреЛ рдмрд╕ рддреИрдпрд╛рд░ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЖрдЗрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЬрд╛рдПрдВ, рдЬрд╣рд╛рдВ рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдХреЗрд╡рд▓ рддрднреА рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдмрд┐рди рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рд╣реЛред @Configuration @EnableConfigurationProperties(RavenProperties.class) public class IronConfiguration { @Bean @ConditionalOnProduction @ConditionalOnProperty(".") @ConditionalOnMissingBean</b> public RavenListener ravenListener(RavenProperties r) { return new RavenListener(r); } }
рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХрд╛рдВрд╢ рд╢реБрд░реБрдЖрдд рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рди, рдкреНрд░рддреНрдпреЗрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдРрд╕реЗ рдмрдВрдбрд▓ рдХреЗ рд╕рд╛рде рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВредрдЬрдм рд░реИрд╡реЗрди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдИрд╡реЗрдВрдЯ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрдкрдиреЗ рдирдП рд╢реНрд░реЛрддрд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ - MyRavenListener
ред
рдпрд╣рд╛рдВ рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИрдВредрдкрд╣рд▓рд╛ рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рд╢реНрд░реЛрддрд╛ рд╕реЗ рдШрдмрд░рд╛ рдЧрдП, рдФрд░ рд╡рд╣рд╛рдВ рдХрд┐рд╕реА рд╢реНрд░реЛрддрд╛ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦрд╛: @Component public class MyRavenListener implements ApplicationListener { public MyRavenListener(RavenProperties ravenProperties) { super(ravenProperties); } @Override public void onApplicationEvent(ContextRefreshedEvent event) { ravenProperties.get().forEach(s -> { System.out.println("event = " + event); }); } }
рджреВрд╕рд░рд╛ - рд╣рдордиреЗ рдЗрд╕реЗ рдШрдЯрдХ рдХреА рдорджрдж рд╕реЗ рдмрдирд╛рдпрд╛ рд╣реИред рдпрджрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдЬрд╛рд╡рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдмреАрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рд╡рд░реНрдЧ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдЧрд╛, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛редрдпрджрд┐ рдореИрдВ рд╕рд╛рдл extends
- рд╕рдлрд╛рдИ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реНрд░реЛрддрд╛ рдмрдирд╛рддрд╛ рд╣реВрдВ , рддреЛ рдпрд╣ @ConditionalOnMissingBean
рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдХрдм рд╕реЗ
рд╡рд░реНрдЧ рдХреЛ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рд╣рдо рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ ravenListener
- рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдерд╛ред рдКрдкрд░, рд╣рдордиреЗ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдЬрд╛рд╡рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕реЗрдо рдирд╛рдо рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рд╕реЗ рд╣реЛрдЧрд╛ред рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рдмрд┐рди рдмрдирд╛рддреЗ рд╣реИрдВ ravenListener
редрдЖрдкрдХреЛ рдпрд╣ рд╕рдм рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдЖрдорддреМрд░ рдкрд░ рд╕реБрдкрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╢реБрд░реБрдЖрдд рдореЗрдВред рдЬрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реА рд╣реИ, рддреЛ рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛, рддреАрд╕рд░рд╛ред рдЖрдк рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╡рд╣ рдирд╣реАрдВ рджреЗрдЧрд╛ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдмрд┐рди рд╕рдВрдШрд░реНрд╖ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдПрдХ рдмреАрди рдирд╣реАрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдФрд░ рдмреАрди рдХреЛ рдЕрдкрдиреЗ рдШрд░ рдореЗрдВ рдХреИрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╕рдВрдШрд░реНрд╖ рди рдХрд░реЗрдВ (рдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рд╢реБрд░реБрдЖрдд рд╣реИрдВ рдЬреЛ рдПрдХ рдФрд░ рдПрдХ рд╣реА рд▓рд╛рдПрдВред рд╡рд╣реА рдмрд┐рди рддрд╛рдХрд┐ рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рди рдХрд░реЗрдВ)ред рд╕рдВрдШрд░реНрд╖ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреА рд╕реЗрдо рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рди рддреЛ рдкрд╣рд▓реЗ рдФрд░ рди рд╣реА рджреВрд╕рд░рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рдПредрдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╕реЗрдо рд╕рдВрдШрд░реНрд╖ рдПрдХ рдЕрдЪреНрдЫреА рд╕реНрдерд┐рддрд┐ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдордиреЗ рд╕рдорд╛рди рдмрд┐рди рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░рд╛ рдХреЛрдИ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдПрдХ рдмреАрди рдмрд╕ рджреВрд╕рд░реЗ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░реЗрдЧрд╛ред рдФрд░ рдЖрдк рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдордЭ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдмрдирд╛рддреЗ рд╣реИрдВ @Bean
, рддреЛ рдпрд╣ рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджреЗрдЧрд╛ @Bean
редрд╡реИрд╕реЗ, рдЕрдЧрд░ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЛ рдЖрдкрдХреА рдЬрд░реВрд░рдд рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рд╕рд╛рдорд╛рди рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдмрд╕ рдЙрд╕реА рдЖрдИрдбреА рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдмрд┐рди рдмрдирд╛рдПрдВред рдпрд╣ рд╕рдЪ рд╣реИ, рддреЛ рдЕрдЧрд░ рдХрд┐рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╣реА рд╣реИ, рдЖрдкрдХрд╛ рдмрд┐рди рдлрд┐рд░ рд╕реЗ рджреЛ рд╣реЛ рдЬрд╛рдПрдЧрд╛редConditionalOnPuzzler
рд╣рдо @ConditionalOnClass
, @ConditionalOnMissingBean
рд╡рд╣рд╛рдБ рд╡рд░реНрдЧреЛрдВ рд▓реЗрдЦрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдирд┐рд╖реНрдкрд╛рджрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВредрд╕рд╛рдмреБрди рд╣реИ, рд░рд╕реНрд╕реА рд╣реИ - рд╣рдо рдлрд╛рдВрд╕реА рдкрд░ рд▓рдЯрдХрддреЗ рд╣реИрдВред рдПрдХ рдХреБрд░реНрд╕реА рдФрд░ рдПрдХ рд╡рд░реНрддрдорд╛рди рд╣реИ - рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдПрдХ рдХреБрд░реНрд╕реА рдкрд░ рд░рдЦрдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИред рдПрдХ рдЧрд┐рд▓реЛрдЯрд┐рди рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдореВрдб рд╣реИ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рд┐рд░ рдХрд╛рдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред @Configuration public class { @Bean @ConditionalOnClass({.class, .class}) @ConditionalOnMissingBean({.class}) public () { return new ("..."); } @Bean @ConditionalOnClass({.class, .class}) @ConditionalOnMissingBean({.class}) public c() { return new (" "); } @Bean @ConditionalOnClass({.class, .class}) @ConditionalOnMissingBean({.class}) public () { return new (" "); } }
рд╣рдо рдХреИрд╕реЗ рдЕрдорд▓ рдХрд░реЗрдВрдЧреЗ?рдкреНрд░рд╢реНрди: рдПрдиреЛрдЯреЗрд╢рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреИрд╕реЗ @ConditionalOnMissingClass
рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ ?рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдПрдХ рдлрд╛рдВрд╕реА рдмрдирд╛рдПрдЧреАред рд▓реЗрдХрд┐рди рдПрдХ рдлрд╛рдВрд╕реА рдХрд╛ рдлрдВрджрд╛ рддрднреА рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╕рд╛рдмреБрди рдФрд░ рд░рд╕реНрд╕реА рд╣реЛред рд▓реЗрдХрд┐рди рд╕рд╛рдмреБрди рдирд╣реАрдВ рд╣реИред рдореИрдВ рдХреИрд╕реЗ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ рд╕рд╛рдмреБрди рдпрд╛ рд╕рд┐рд░реНрдл рд░рд╕реНрд╕реА рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдореИрдВ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рд╕реЗ рдПрдиреЛрдЯреЗрд╢рди рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдпреЗ рдПрдиреЛрдЯреЗрд╢рди рдЙрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдирд╣реАрдВ рд╣реИрдВ? рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП?рдЙрддреНрддрд░ рд╡рд┐рдХрд▓реНрдк:- ClassDefNotFound? , . - , ClassDefNotFound , reflection- , conditional as long as;
- , . reflection . , .
- ;
- .
: , . reflection . exception, , тАФ . reflection? , , , , тАФ ClassDefNotFound
.
рдпрд╣ ASM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ - рдХреБрдЫ рднреА рдирд╣реАрдВ, рд╡рд╕рдВрдд, рдмрд╛рдпреЛрдЯреЗрдХ рдХреЛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдкрд╛рд░реНрд╕рд▓ рдХрд░реЗрдЧрд╛ред рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рди рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдпрд╣ рд╕рдордЭ рд╕рдХреЗ рдХрд┐ @Conditional
рд╕рд╛рдмреБрди, рд░рд╕реНрд╕реА рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реИ ред рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди ASM, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВред рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рдХреЛ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдкрдврд╝рдиреЗ рдФрд░ рд╡рд┐рдзрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдордЭрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИредрд▓реЗрдХрд┐рди Juergen Hoeller рдиреЗ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рд╣реИ OnMissingClass
рдЬреЛ рдХрдХреНрд╖рд╛ рдХреЗ рдирд╛рдо (рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХреНрд▓рд╛рд╕ рдХреЗ рдирд╛рдо рд╕реЗ рдмрдВрдзрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рджреА рд╣реИ ред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдПрд╕рдПрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╕реНрд░реЛрдд рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХреЛрдИ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИредрд▓реЛрд╣рд╛ рдХрд╛рдиреВрди рез.релред рдХреНрд░реЛ рдХреЛ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рдХрд░реЗрдВ
рд╣рдореЗрдВ рдПрдХ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА - рдХреНрд░реЛ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдпрд╛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рдХрд┐рд╕реА рдХреЛ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдЖрдЦрд┐рд░реА рд╢рд░реНрдд рд╣реИ рдЬреЛ рд╣рдо рдЖрдкрдХреЛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВредрд╣рдорд╛рд░реЗ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреБрдЫ рдирд╣реАрдВ рджреЗрддреЗ рд╕рд┐рд╡рд╛рдп рдПрдХ рд░реЗрд╡рдбрд╝ рдХреЗред рдЗрд╕рд▓рд┐рдП, рдЖрдк рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЪрд╛рд▓реВ / рдмрдВрдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХреНрдпреЛрдВ рд╣реЛ, рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддреЗ? рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рдЗрд╕ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рднрд░рд╡рд╛рдИ рдЬрд╛рдПрдВрдЧреАред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдПрдХ рд░реЗрд╡реЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ - рдпрд╣ рдорд╣рдВрдЧрд╛ рд╣реИ, рдЗрд╕реЗ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рднреЗрдЬрдирд╛ рд╣реИ - рдпрд╣ рдПрдХ рдмреИрд╕рд╛рдЦреА рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИредрдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рдм рдХреБрдЫ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░реЗрдВрдЧреЗ @ConditionalOnProperty(".")
ред @Configuration @EnableConfigurationProperties(RavenProperties.class) public class IronConfiguration { @Bean @ConditionalOnProduction @ConditionalOnProperty(".") @ConditionalOnProperty(".") public RavenListener ravenListener(RavenProperties r) { return new RavenListener(r); } }
рдФрд░ рд╡рд╣ рд╣рдо рдкрд░ рдХрд╕рдо рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдПрдиреЛрдЯреЗрд╢рдиред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рд╣реИ, рддреЛ рдпрд╣ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред рд╣рдо рдпрд╣ рджреЛ рдЧреБрдгреЛрдВ рдкрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗредрд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рд╕рд░рдгреА рд╣реИ - рдЖрдк рд╡рд╣рд╛рдВ рдХрдИ рд╕рдВрдкрддреНрддрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред @Conditional(OnPropertyCondition.class) public @interface ConditionalOnProperty { String[] value() default {}; String prefix() default ""; String[] name() default {}; String havingValue() default ""; boolean matchIfMissing() default false; boolean relaxedNames() default true; }
рдФрд░ рдпрд╣ рд╕рдм рдареАрдХ рд╣реИ, рдЬрдм рддрдХ рдЖрдк рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ
, рдЬреЛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП false
рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдЬреЛ string
рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП ред рд▓реЗрдХрд┐рди рдЖрдк рд╕рднреА рд╕рдВрдкрддреНрддрд┐ рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рдореВрд▓реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдпрд╣реА рд╣реИ, рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ: @ConditionalOnProduction @ConditionalOnProperty(name = ".", havingValue="true") @ConditionalOnProperty(name = ".", havingValue="true") @ConditionalOnProperty(name = ".",havingValue="false") public IronBankApplicationListener applicationListener() { ... }
@ConditionalOnProduction @ConditionalOnProperty( name = { ".", ".", "." }, havingValue = "true" ) public IronBankApplicationListener applicationListener() { ... }
рдпрд╣рд╛рдБ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдПрдХ рд╕рд░рдгреА рдирд╣реАрдВ рд╣реИредрдПрдХ рд╡рд┐рдХреГрддрд┐ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрдИ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдореВрд▓реНрдп рд╣реИ: AllNestedConditions
рдФрд░ AnyNestedCondition
ред
рдпрд╣, рдЕрдЬреАрдм, рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ - рдПрдХ рдирдИ рд╕реНрдерд┐рддрд┐ рдЬреЛ рджреЛрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдЧреА .
рдФрд░ .
ред @Configuration @EnableConfigurationProperties(RavenProperties.class) public class IronConfiguration { @Bean @ConditionalOnProduction @ConditionalOnProperty(".") @ConditionalOnRaven public RavenListener ravenListener(RavenProperties r) { return new RavenListener(r); } }
рд╣рдордиреЗ рдЕрдкрдирд╛ рдПрдиреЛрдЯреЗрд╢рди рдбрд╛рд▓рд╛ @Conditional()
рдФрд░ рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдХреБрдЫ рдХреНрд▓рд╛рд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреА рд╣реИред @Retention(RUNTIME) @Conditional({OnRavenCondional.class}) public @interface CondionalOnRaven { }
рд╣рдо рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред public class OnRavenCondional implements Condition { }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдХрдВрдбреАрд╢рдирд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░рдиреА рдереА, рд▓реЗрдХрд┐рди рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдиреЛрдЯреЗрд╢рди рд╣реИ: public class CompositeCondition extends AllNestedConditions { @ConditionalOnProperty( name = ".", havingValue = "false") public static class OnRavenProperty { } @ConditionalOnProperty( name = ".enabled", havingValue = "true", matchIfMissing = true) public static class OnRavenEnabled { } ... }
рд╣рдо рд╕рдордЧреНрд░ рд╣реИ Conditional
рдпрд╛ рддреЛ - рдЬреЛ рднреА рдЕрдиреНрдп рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, AllNestedConditions
рдпрд╛ AnyNestedCondition
- рдФрд░ рдпрд╣ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ, рдкрд╛рд░рдВрдкрд░рд┐рдХ рдПрдиреЛрдЯреЗрд╢рди kondishenom рд╣реИрдВред рдпрд╛рдиреА
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп @Condition
рд╣рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: public class OnRavenCondional extends AllNestedConditions { public OnRavenCondional() { super(ConfigurationPhase.REGISTER_BEAN); } }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдВрджрд░ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрдЕрдм рд╣рдореЗрдВ рдпрд╣рд╛рдВ рд╕реНрдЯреИрдЯрд┐рдХ рдХреНрд▓рд╛рд╕реЗрд╕ рдмрдирд╛рдиреА рд╣реЛрдВрдЧреАред рд╣рдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ (рдЪрд▓реЛ рдЗрд╕реЗ рдЖрд░ рдХрд╣рддреЗ рд╣реИрдВ)ред public class OnRavenCondional extends AllNestedConditions { public OnRavenCondional() { super(ConfigurationPhase.REGISTER_BEAN); } public static class R {} }
рд╣рдо рдЕрдкрдирд╛ рдореВрд▓реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ
(рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП true
)ред public class OnRavenCondional extends AllNestedConditions { public OnRavenCondional() { super(ConfigurationPhase.REGISTER_BEAN); } @ConditionalOnProperty(".") public static class R {} @ConditionalOnProperty(value= ".", havingValue = "true") public static class C {} }
рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рд╡рд░реНрдЧ рдирд╛рдо рдпрд╛рдж рд░рдЦреЗрдВред рд╕реНрдкреНрд░рд┐рдВрдЧ рдореЗрдВ рдЕрдЪреНрдЫреЗ рдЬрд╛рд╡рд╛ рдбреЙрдХ рд╣реИрдВред рдЖрдк IDEA рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛ рдбреЙрдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрд╣рдо рдЕрдкрдирд╛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ @ConditionalOnRaven
ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рджреЛрдиреЛрдВ рдХреЛ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ @ConditionalOnProduction
, рдФрд░ , рдФрд░ @ConditionalOnMissingBean
, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдмрд╕ рджреЗрдЦреЛ рдХреНрдпрд╛ рд╣реБрдЖред @Configuration @EnableConfigurationProperties(RavenProperties.class) public class IronConfiguration { @Bean @ConditionalOnProduction @ConditionalOnRaven @ConditionalOnMissingBean public RavenListener ravenListener(RavenProperties r) { return new RavenListener(r); } }
рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ
рд░рд╛рд╡рдг рдирд╣реАрдВ рдЙрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╣ рдЙрдбрд╝рддрд╛ рдирд╣реАрдВ рдерд╛редрдореИрдВ рд╢рд░реНрдд рдирд╣реАрдВ
рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ , рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрд╡рдд: рдкреВрд░реНрдг рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ - рдпрд╣ рд╣рдорд╛рд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред @Data @ConfigurationalProperties("") public class RavenProperties { List<String> ; boolean ; }
рд╡рд╣ рд╕рдм рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ false
, application.yml true
рдореЗрдВ рдбрд╛рд▓реЗрдВ: jpa.hibernate.ddl-auto: validate ironbank: ---: - : : , : true
рд╣рдо рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рд░реИрд╡реЗрди рдЙрдбрд╝ рдЬрд╛рддреЗ рд╣реИрдВредрдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╕рдордЧреНрд░ рдПрдиреЛрдЯреЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдореМрдЬреВрджрд╛ рдПрдиреЛрдЯреЗрд╢рди рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╡реЗ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рдпреЛрдЧреНрдп рди рд╣реЛрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдмрдЪрд╛рдПрдЧрд╛редрдЕрдЧрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдЬрд╛рд░реА рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдФрд░ рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХрд╛ рдорд┐рдирдЯред
рдЬреЛрдХрд░ 2018 рд╕рдореНрдореЗрд▓рди 19-20 рдЕрдХреНрдЯреВрдмрд░ рдХреЛ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рдпреЗрд╡рдЧреЗрдиреА рдмреЛрд░рд┐рд╕реЛрд╡, рдмрд░реВрдЪ рд╕рджреЛрдЧреБрд░рд╕реНрдХреА рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░, "рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╡рд░реНрд▓реНрдб (рдЬреЛрдХрд░ рдПрдбрд┐рд╢рди]] рдореЗрдВ рд╕реЗрдиреЛрд░ рд╣реЛрдореНрд╕ рдФрд░ рдЬреВрдирд┐рдпрд░ рд╡реЙрдЯрд╕рди рдХреЗ рдПрдбрд╡реЗрдВрдЪрд░реНрд╕" рд╢реАрд░реНрд╖рдХ рд╕реЗ рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рджреЗрдВрдЧреЗ , рдФрд░ рдХрд┐рд░рд┐рд▓ рдЯреЛрд▓рдЪреЗрд╡ рдФрд░ рдореИрдХреНрд╕рд┐рдо рдЧреЛрд░реЗрд▓рд┐рдХреЛрд╡ рд░рд┐рдкреЛрд░реНрдЯ "рдорд╛рдЗрдХреНрд░реЛрди рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕реНрдкреНрд░рд┐рдВрдЧ" рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗред рдпрд╛ рдпрд╣рд╛рдБ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдХреМрди рд╣реИ? тАЭ ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬреЛрдХрд░ рдореЗрдВ рдХрдИ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░рд┐рдкреЛрд░реНрдЯреЗрдВ рд╣реЛрдВрдЧреАред рд╕рдореНрдореЗрд▓рди рдХреА
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЯрд┐рдХрдЯ рдЦрд░реАрджреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рднреА рд╣реИ!