рд╡рд╕рдВрдд рдореЗрдВ рд╕рд╢рд░реНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдЕрдХреНрд╕рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╕рд╢рд░реНрдд рдПрдиреЛрдЯреЗрд╢рди рдФрд░ рдХрдВрдбреАрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред


рд╡рд╕рдВрдд рд╕рдВрджрд░реНрдн рд╡рд┐рднрд┐рдиреНрди рдлрд▓рд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдХрдВрдЯреЗрдирд░ рд╣реИ, рджреЛрдиреЛрдВ рд╡рд╕рдВрдд рдФрд░ рдХрд╕реНрдЯрдо рд╡рд╛рд▓реЗред рдЖрдк рд╣рдореЗрд╢рд╛ рдЗрд╕ рдмрд┐рди рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░ рдХреЗ рд▓рд┐рдП рд▓рдЪреАрд▓реЗ рдкреНрд░рдмрдВрдзрди рдЙрдкрдХрд░рдг рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП @Conditional рдПрдиреЛрдЯреЗрд╢рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред


рд╡рд╕рдВрдд рд╕рдВрджрд░реНрдн рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рддрд░реАрдХрд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИред рд╡реЗ рдЖрдкрдХреЛ рд╕реЗрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА, рдЕрдзрд┐рдХ рдареАрдХ-рдЯреНрдпреВрдирд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ: рдбреЗрд╡рд▓рдкрд░ рдХреА рдорд╢реАрди рдкрд░ рдПрдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕-рдЯрд╛рдЗрдк рдмрд┐рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдм рдирд┐рд░реНрдорд╛рдг рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рд╣реА рдкрд░реАрдХреНрд╖рдг рдЪрд▓ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд╛рдИ-рдмрд┐рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЙрддреНрдкрд╛рджрди рдкрд░ рдЬреЗрдб-рдмрд┐рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред @ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдФрд░ рдЖрд╕рд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдирд┐рд░реНрдгрдпред рдмрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЕрд╕рдВрдмрджреНрдз рдЯреАрдореЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рд╕рдордп рд╕реАрдорд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдкрдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рд╣реИред рдЗрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдирд╛ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣реА рд╣реИ, рдлрд┐рд░ рд╕реЗ рдЬрдорд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдЖрд╡реЗрджрди рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред


рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рди рдХреЗ рдКрдкрд░, рд╣рдо @ рдХрдВрдбреАрд╢рдирд▓ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢рд░реНрддреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдЬрдм рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ, рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


@Target(value={TYPE,METHOD}) @Retention(value=RUNTIME) @Documented public @interface Conditional 

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рд╢рд░реНрддреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


 Class<? extends Condition>[] 

рдЬрд╣рд╛рдВ рд╕рд╢рд░реНрдд рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ


 boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) 

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░ред рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╕рд╛рдмреБрди / рдмрд╛рдХреА - рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдЬреЗрдПрдордПрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛрдиреЛрдВ рдХрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИред рд▓реЗрдХрд┐рди рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХреЗ рдкрд╛рд╕ рд╕рдордп рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ - рд╣рдо JMS рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЗрдПрдордПрд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЬрд╛рд╡рд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:


 @Configuration public class JmsConfig { ... } 

рд╡рд╕рдВрдд рдЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдЦреЛрдЬрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рдЕрдиреНрдп рд╕рднреА рдЖрд╢реНрд░рд┐рдд рд╕реЗрдо рдХреЛ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрддрд╛рд░ рд╕реЗ рдкрдврд╝рдирд╛ред рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд╢рд░реНрдд рд╡реНрдпреБрддреНрдкрдиреНрди рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - ConditioanalOnProperty


 @ConditionalOnProperty( value="project.mq.enabled", matchIfMissing = false) @Configuration public class JmsConfig { ... } 

рдпрд╣рд╛рдВ рд╣рдо рдмрд┐рд▓реНрдбрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддрднреА рдмрдирд╛рдПрдВрдЧреЗ, рдЬрдм рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ project.mq.enabled рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рд╣реЛред
рдЕрдм рд╣рдо рдЖрд╢реНрд░рд┐рдд рдлрд▓рд┐рдпреЛрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЛрдВрдбрд┐рдЯрд┐рдУрдирд▓рдСрдирдмрд┐рди рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд╕рдВрдд рдХреЛ рдЙрди рдлрд▓рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рд╕реЗ рд░реЛрдХ рджреЗрдЧрд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред


 @ConditionalOnBean(JmsConfig.class) @Component public class JmsConsumer { ... } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрджрд▓рдХрд░ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред


рд╕рд╛рде рдореЗрдВ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдбреЗрд╡рд▓рдкрд░ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ 99% рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдПрдиреЛрдЯреЗрд╢рди рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИ (рдЬреЛ рдмрд╛рдж рдореЗрдВ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╕реНрдЯрдо рддрд░реНрдХ рдХреЛ рд╡рд╕рдВрдд рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред


рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдмреАрди рд╣реИ - SuperDBLogger , рдЬрд┐рд╕реЗ рд╣рдо рдХреЗрд╡рд▓ рддрднреА рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдм рд╣рдорд╛рд░реЗ рдХрд┐рд╕реА рднреА рдбрд┐рдмреНрдмреЗ рдореЗрдВ @Loggable рдПрдиреЛрдЯреЗрд╢рди рд╣реЛред рдпрд╣ рдХреЛрдб рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:


 @Component @ConditionalOnLoggableAnnotation public class SuperDBLogger тАж 

рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ @ConditionalOnLoggableAnnotation рдПрдиреЛрдЯреЗрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :


 @Target({ ElementType.TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Conditional(OnLoggableAnnotation.class) public @interface ConditionalOnLoggableAnnotation { } 

рд╣рдореЗрдВ рдХрд┐рд╕реА рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдм рдЖрдЗрдП рддрд░реНрдХ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ - OnLoggableAnnotation class рдХреА рд╕рд╛рдордЧреНрд░реАред рдЗрд╕рдореЗрдВ, рд╣рдо рдорд┐рд▓рд╛рди рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдмреАрдиреНрд╕ рдХреА рдЦреЛрдЬ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред


 public class OnLoggableAnnotation implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { ClassPathScanner scanner = new ClassPathScanner(); scanner.addIncludeFilter(new AnnotationTypeFilter(Loggable.class)); Set<BeanDefinition> bd = scanner.findInPackage("ru.habr.mybeans"); if (!bd.isEmpty()) return true; return false; } } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдПрдХ рдирд┐рдпрдо рдмрдирд╛рдпрд╛ рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЕрдм рд╕реБрдкрд░рдбрдмреНрд▓реЙрдЧреНрдЧрд░ рдмрдирд╛рддрд╛ рд╣реИред рд╕реНрдкреНрд░рд┐рдВрдЧрдмреВрдЯ рдЕрдиреБрдпрд╛рдпрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдиреЗ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреВрдЯрдХреЙрдиреНрдбрд┐рд╢рди рдмрдирд╛рдпрд╛ рд╣реИ, рдЬреЛ рд╣рд╛рд▓рдд рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИред рдпрд╣ рдкреБрдирд░реНрдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рднрд┐рдиреНрди рд╣реИ:


 public abstract ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata); 

рдпрд╣реА рд╣реИ, рдЬрд╡рд╛рдм рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдПрдХ рдмрд┐рди рдХреА рдЬрд░реВрд░рдд рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЖрдк рдПрдХ рд╕рдВрджреЗрд╢ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рддрдм рд╡рд╕рдВрдд рд▓реЙрдЧ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдПрд╣рд╕рд╛рд╕ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдмрд┐рди рдХрд┐рд╕ рдХрд╛рд░рдг рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдирд╣реАрдВред


рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдпреЗ рддрдВрддреНрд░ рдХрдХреНрд╖рд╛рдПрдВ AnyNestedCondition, AllNestedConditions, рдФрд░ noneNestedConditions рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рджреЛ рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЬрдм рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╣реЛ рдЬрд╛рдП, рддреЛ рд╣рдорд╛рд░реА рд╕реЗрдо рдмрди рдЬрд╛рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреА рдЦреБрдж рдХреА рдХрдХреНрд╖рд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ AnyNestedCondition рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ ред


 public class AnnotationAndPropertyCondition extends AnyNestedCondition { public AnnotationAndPropertyCondition() { super(REGISTER_BEAN); } @ConditionalOnProperty(value = "db.superLogger") static class Condition1 {} @ConditionalOnLoggableAnnotation static class Condition2 {} } 

рд╡рд░реНрдЧ рдХреЛ рдХрд┐рд╕реА рднреА рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ; рд╡рд╕рдВрдд рд╕реНрд╡рдпрдВ рдЗрд╕реЗ рдвреВрдВрдв рд▓реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЗрд╡рд▓ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреВрд░рд╛ рд╣реБрдЖ рд╣реИ: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдирдкреЗрдЬрд╝ .REGISTER_BEAN - рдирд┐рдпрдорд┐рдд рдмреАрдиреНрд╕ рдмрдирд╛рддреЗ рд╕рдордп, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдирдкреЗрдЬрд╝ редPARSE_CONFIGURATION - рдЬрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реЛ (рдЬреЛ @Configuration рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдбрдмреНрдмреЗ рдХреЗ рд▓рд┐рдП рд╣реИ )ред


рдЗрд╕реА рддрд░рд╣, рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП AllNestedConditions рдФрд░ noneNestedConditions - рдкрд╣рд▓реА рд╕рднреА рд╢рд░реНрддреЛрдВ рдХреА рдкреВрд░реНрддрд┐ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ - рдХреЛрдИ рд╢рд░реНрдд рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рд╢рд░реНрддреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрдИ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, @ рдХрдВрдбреАрд╢рдирд▓ ({OnLoggableAnnotation.class, AnnotationAndPropertyCondition.class}) ред рджреЛрдиреЛрдВ рдХреЛ рд╕рд╣реА рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╕реНрдерд┐рддрд┐ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛ рдФрд░ рдмреАрди рдмрдирд╛рдИ рдЬрд╛рдПред


рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╕рдВрдд рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рдЬреЛ рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рд╣реИрдВред


рдЕрдореВрд░реНрддрд╡рд┐рд╡рд░рдг
ConditionalOnBeanрдмреАрдирдлреИрдХреНрдЯреНрд░реА рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдмреАрди рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ рд╕реНрдерд┐рддрд┐ рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИред
ConditionalOnClassрдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧ рдХреНрд▓рд╛рд╕рдкрд╛рде рдореЗрдВ рд╣реИ рддреЛ рд╕реНрдерд┐рддрд┐ рд╕рдВрддреБрд╖реНрдЯ рд╣реИред
ConditionalOnCloudPlatformрд╕реНрдерд┐рддрд┐ рддрдм рдорд┐рд▓рддреА рд╣реИ рдЬрдм рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдордВрдЪ рд╕рдХреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИред
ConditionalOnExpressionрд╕реНрдерд┐рддрд┐ рддрдм рд╕рддреНрдп рд╣реЛрддреА рд╣реИ рдЬрдм рд╕реНрдкреЗрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
ConditionalOnJavaрд╕реНрдерд┐рддрд┐ рддрдм рдорд┐рд▓рддреА рд╣реИ рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЬреЗрд╡реАрдПрдо рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
ConditionalOnJndiрд╢рд░реНрдд рдХреЗрд╡рд▓ рддрднреА рд╕рдВрддреБрд╖реНрдЯ рд╣реЛрддреА рд╣реИ рдЬрдм JNDI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕рд╛рдзрди рдЙрдкрд▓рдмреНрдз рд╣реЛред
ConditionalOnMissingBeanрдЕрдЧрд░ рдмреАрдирдлреИрдХреНрдЯреНрд░реА рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдмреАрди рдЧрд╛рдпрдм рд╣реИ рддреЛ рд╢рд░реНрдд рдкреВрд░реА рдХреА рдЬрд╛рддреА рд╣реИред
ConditionalOnMissingClassрд╢рд░реНрдд рд╕рд╣реА рд╣реИ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧ рдХреНрд▓рд╛рд╕рдкрд╛рде рдореЗрдВ рдирд╣реАрдВ рд╣реИред
ConditionalOnNotWebApplicationрдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрджрд░реНрдн рд╡реЗрдм рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ рддреЛ рд╕реНрдерд┐рддрд┐ рд╕рд╣реА рд╣реИред
ConditionalOnPropertyрд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╕реНрдерд┐рддрд┐ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛрддреА рд╣реИред
ConditionalOnResourceрдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрд╕рд╛рдзрди рд╡рд░реНрдЧрдкрде рдореЗрдВ рдореМрдЬреВрдж рд╣реИ рддреЛ рд╕реНрдерд┐рддрд┐ рд╕рдВрддреБрд╖реНрдЯ рд╣реИред
ConditionalOnSingleCandidateрд╢рд░реНрдд рдкреВрд░реА рдХреА рдЬрд╛рддреА рд╣реИ рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд░реНрдЧ рдХреА рдмреАрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреАрдирдлреИрдХреНрдЯрд░реА рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╣реИред
ConditionalOnWebApplicationрдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрджрд░реНрдн рд╡реЗрдм рд╕рдВрджрд░реНрдн рд╣реИ рддреЛ рд╕реНрдерд┐рддрд┐ рд╕рд╣реА рд╣реИред

рдЙрди рд╕рднреА рдХреЛ рдПрдХ рд╕реЗрдо рдХреА рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдПрдХ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, @ рдХреЙрдиреНрдбрд┐рд╢рдирд▓ рд╕рдВрджрд░реНрдн рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдлреА рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рддрдереНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрджрд░реНрдн рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЙрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдбрдмреНрдмреЗ рдХреЗ рд╕рд╛рде, рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдЖрд╡реЗрджрди рдХреЛ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдХреЛрдб рд╕рдорд░реНрдерди рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/hi462541/


All Articles