рдЕрдВрджрд░ рд╡рд╕рдВрддред рдкреНрд░рд╕рдВрдЧ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрджрдо





рд╢реБрдн рджрд┐рди рдкреНрд░рд┐рдп Kravravchiansред 3 рд╕рд╛рд▓ рд╕реЗ рдореИрдВ рдПрдХ рдРрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА рдХрд┐ рдпрд╣ рдЕрдВрджрд░ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдЦреЛрдЬреЗ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ рдХреБрдЫ рдирд╣реАрдВ рдорд┐рд▓рд╛ред



рдЬреЛ рдХреЛрдИ рднреА рд╡рд╕рдВрдд рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ, рдореИрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реВрдВред



рдЖрд░реЗрдЦ ApplicationContext рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рдореБрдЦреНрдп рдЪрд░рдгреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рд╣рдо рдЗрди рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдХреБрдЫ рдЪрд░рдг рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдХреБрдЫ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред







1. рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдмреАрдирдбрд┐рдлрд┐рдирд┐рд╢рди рдмрдирд╛рдирд╛



рд╡рд╕рдВрдд рдХреЗ рдЪреМрдереЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рд░рд┐рд╣рд╛рдИ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдЪрд╛рд░ рддрд░реАрдХреЗ рд╣реИрдВ:

  1. Xml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди - ClassPathXmlApplicationContext ("reference.xml")
  2. рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдХреИрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ - рдПрдиреЛрдЯреЗрд╢рди рдХреЙрдирдлрд┐рдЧ рдПрдкрд┐рд▓реЗрд╢рди рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ ("рдкреИрдХреЗрдЬрдирд╛рдо")
  3. рдПрдиреЛрдЯреЗрд╢рди @Configuration -AnnotationConfigApplicationContext (JavaConfig.class) рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╡рд░реНрдЧ (рдпрд╛ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рд╕рд░рдгреА) рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдзрд┐ рдХреЛ JavaConfig рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
  4. Groovy рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди - GenericGroovyApplicationContext ("reference.groovy")


рдЪрд╛рд░реЛрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпрд╣рд╛рдБ рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВ ред



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



Xml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди


Xml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - XmlBeanDefinitionReader , рдЬреЛ BeanDefinitionReader рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рдкрд╛рд░рджрд░реНрд╢реА рд╣реИред XmlBeanDefinitionReader рдПрдХ InputStream рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ DefaultDocumentLoader рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ рдПрдХ рдмрд┐рди рд╣реИ, рддреЛ рдПрдХ рдмреАрдирдбрд┐рдлрд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рднрд░реЗ рдЧрдП рдбреЗрдЯрд╛ (рдЖрдИрдбреА, рдирд╛рдо, рд╡рд░реНрдЧ, рдЙрдкрдирд╛рдо, init- рд╡рд┐рдзрд┐, рдирд╖реНрдЯ-рд╡рд┐рдзрд┐, рдЖрджрд┐) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмреАрдирдбрд┐рдлрд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдорд╛рдирдЪрд┐рддреНрд░ DefaultListableBeanFactory рд╡рд░реНрдЧ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдб рдореЗрдВ, рдореИрдк рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред



/** Map of bean definition objects, keyed by bean name */ private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>(64);
      
      





рд╕реНрдХреИрди рдпрд╛ JavaConfig рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рдкреИрдХреЗрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди


рд╕реНрдХреИрдирд┐рдВрдЧ рдпрд╛ JavaConfig рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореВрд▓ рд░реВрдк рд╕реЗ xml рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдЕрд▓рдЧ рд╣реИред рджреЛрдиреЛрдВ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, AnnotationConfigApplicationContext рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



 new AnnotationConfigApplicationContext(JavaConfig.class);
      
      





рдпрд╛



 new AnnotationConfigApplicationContext(тАЬpackage.nameтАЭ);
      
      





рдпрджрд┐ рдЖрдк AnnotationConfigApplicationContext рдХреЗ рдЕрдВрджрд░ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЛ рдлрд╝реАрд▓реНрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред



 private final AnnotatedBeanDefinitionReader reader; private final ClassPathBeanDefinitionScanner scanner;
      
      





ClassPathBeanDefinitionScanner @Component рдПрдиреЛрдЯреЗрд╢рди (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдиреЛрдЯреЗрд╢рди рдЬрд┐рд╕рдореЗрдВ @Component рд╢рд╛рдорд┐рд▓ рд╣реИрдВ) рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреИрдХреЗрдЬ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИред рдорд┐рд▓реА рдХрдХреНрд╖рд╛рдПрдВ рдкрд╛рд░реНрд╕ рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдмреАрдирдбрд┐рдлрд╛рдЗрдирдореЗрдВрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреИрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рд╕реНрдХреИрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред



 @ComponentScan({"package.name"})
      
      





рдпрд╛



 <context:component-scan base-package="package.name"/>
      
      





AnnotatedBeanDefinitionReader рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

  1. рдкрд╣рд▓рд╛ рдХрджрдо рдЖрдЧреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рднреА @Configuration рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕рд╢рд░реНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рд╡реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╢рд░реНрдд рд╕рд╣реА рд╣реЛрдЧреА, рдкрдВрдЬреАрдХреГрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рд╡рд╕рдВрдд рдХреЗ рдЪреМрдереЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рд╢рд░реНрдд рдПрдиреЛрдЯреЗрд╢рди рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рд╕рдВрджрд░реНрдн рдХреЛ рдмрдврд╝рд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдмрд┐рди / рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдФрд░ рдирд┐рд░реНрдгрдп рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╢рд░реНрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
  2. рджреВрд╕рд░рд╛ рдЪрд░рдг рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмреАрдирдлреИрдХреНрдЯрд░реАрдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ рдмреАрдирдбрд┐рдлрд┐рдиреЗрд╢рдирд░реЗрдЬрд┐рд╕реНрдЯреНрд░реАрдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ , рдЬреЛ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдирдХреНрд▓рд╛рд╕рдкреИрд╕рд░ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЬрд╛рд╡рд╛рдХреЛрдирдлрд┐рдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмреАрдирдлреИрдлрд┐рдиреЗрд╢рди рдмрдирд╛рддрд╛ рд╣реИред


рдЧреНрд░реВрд╡реА рд╡рд┐рдиреНрдпрд╛рд╕


рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди Xml рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдПрдордПрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЧреНрд░реВрд╡реА рд╣реИред GroovyBeanDefinitionReader рд╡рд░реНрдЧ рдЧреНрд░реВрд╡реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред



2. рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдмреАрдирдбрд┐рдлрд┐рдирд┐рд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ



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



 public interface BeanFactoryPostProcessor { void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException; }
      
      







PostProcessBeanFactory рд╡рд┐рдзрд┐ configurableListableBeanFactory рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░рдЦрд╛рдиреЗ рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧреА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ getBeanDefinitionNames рд╢рд╛рдорд┐рд▓ рд╣реИ , рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рд╕рднреА BeanDefinitionNames рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП BeanDefinition рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред



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







рдЖрдЗрдП рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред ClassName рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмреАрдирдбреЗрдлрд┐рдиреЗрд╢рди рд╣реИ ред рд╡рд░реНрдЧ рдХреЛрдб рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



 @Component public class ClassName { @Value("${host}") private String host; @Value("${user}") private String user; @Value("${password}") private String password; @Value("${port}") private Integer port; }
      
      







рдпрджрд┐ PropertySourcesPlaceholderConfigurer рдЗрд╕ рдмреАрдирдбрд┐рдлрд╛рдЗрди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ ClassName рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдорд╛рди "$ {host}" рдХреЛ рд╣реЛрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рди рд╢реЗрд╖ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рдпрджрд┐ PropertySourcesPlaceholderConfigurer рдЕрднреА рднреА рдЗрд╕ BeanDefinition рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ , рддреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж, рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдореЗрдЯрд╛рдбрд╛рдЯрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ред



 @Component public class ClassName { @Value("127.0.0.1") private String host; @Value("root") private String user; @Value("root") private String password; @Value("27017") private Integer port; }
      
      







рддрджрдиреБрд╕рд╛рд░, рд╕рд╣реА рдорд╛рдиреЛрдВ рдХреЛ рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



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



XML рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдПред



 <context:property-placeholder location="property.properties" />
      
      





JavaConfig рдХреЗ рд▓рд┐рдПред



 @Configuration @PropertySource("classpath:property.properties") public class DevConfig { @Bean public static PropertySourcesPlaceholderConfigurer configurer() { return new PropertySourcesPlaceholderConfigurer(); } }
      
      







рдкреНрд░реЙрдкрд░реНрдЯреАрдЬрдкреНрд▓рд╕рд╣реЛрд▓реНрдбрд░рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЛ рд╕реНрдереИрддрд┐рдХ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реНрдереИрддрд┐рдХ рдХреЗ рдмрд┐рдирд╛, рд╕рдм рдХреБрдЫ рдЖрдкрдХреЗ рд▓рд┐рдП рддрдм рддрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдЖрдк @ рдорд╛рди рдХреЛ @Configuration рдХреНрд▓рд╛рд╕ рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗред



3. рдХрд╕реНрдЯрдо FactoryBean рдмрдирд╛рдирд╛



FactoryBean рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЯрд╛рдЗрдк рдмреАрдиреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реМрдВрдк рд╕рдХрддреЗ рд╣реИрдВред рдЙрди рджрд┐рдиреЛрдВ рдореЗрдВ рдЬрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдХреНрд╕рдПрдордПрд▓ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдерд╛, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдПрдХ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡реЗ рд╕реЗрдо рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рдереЗред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг xml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджреВрдВрдЧрд╛ред



 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="redColor" scope="prototype" class="java.awt.Color"> <constructor-arg name="r" value="255" /> <constructor-arg name="g" value="0" /> <constructor-arg name="b" value="0" /> </bean> </beans>
      
      







рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ рдФрд░ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рд░рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдПрдХ рдФрд░ рдмреАрди рдмрдирд╛рдПрдБ? рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВред



 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="redColor" scope="prototype" class="java.awt.Color"> <constructor-arg name="r" value="255" /> <constructor-arg name="g" value="0" /> <constructor-arg name="b" value="0" /> </bean> <bean id="green" scope="prototype" class="java.awt.Color"> <constructor-arg name="r" value="0" /> <constructor-arg name="g" value="255" /> <constructor-arg name="b" value="0" /> </bean> </beans>
      
      







рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореБрдЭреЗ рд╣рд░ рдмрд╛рд░ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░рдВрдЧ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ FactoryBean рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред



рдЖрдЗрдП рдПрдХ рдХрд╛рд░рдЦрд╛рдирд╛ рдмрдирд╛рдПрдВ рдЬреЛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдлрд▓рд┐рдпрд╛рдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ - рд░рдВрдЧ ред



 package com.malahov.factorybean; import org.springframework.beans.factory.FactoryBean; import org.springframework.stereotype.Component; import java.awt.*; import java.util.Random; /** * User: malahov * Date: 18.04.14 * Time: 15:59 */ public class ColorFactory implements FactoryBean<Color> { @Override public Color getObject() throws Exception { Random random = new Random(); Color color = new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)); return color; } @Override public Class<?> getObjectType() { return Color.class; } @Override public boolean isSingleton() { return false; } }
      
      







рдЗрд╕реЗ xml рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдШреЛрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреАрдиреНрд╕ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ - рд░рдВрдЧ ред



 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="colorFactory" class="com.malahov.temp.ColorFactory"></bean> </beans>
      
      







рдЕрдм Color.class рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рдмреАрди рдмрдирд╛рддреЗ рд╣реБрдП ColorFactory рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдПрдХ рдирдИ рдмреАрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП getObject рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред



JavaConfig рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд┐рд▓реНрдХреБрд▓ рдмреЗрдХрд╛рд░ рд╣реЛрдЧрд╛ред



4. рдмреАрди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдирд╛



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







5. рдирд┐рд░реНрдорд┐рдд рдлрд▓рд┐рдпреЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛



рдмреАрдирдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЖрдкрдХреЛ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреА рдлрд▓рд┐рдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЬрд╛рдЧрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрдИ рддрд░реАрдХреЛрдВ рдХреЛ рд╡рд╣рди рдХрд░рддрд╛ рд╣реИред



 public interface BeanPostProcessor { Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException; Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException; }
      
      







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

  1. рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЕрдВрддрддрдГ рдмреАрди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рд╡рд┐рдзрд┐ рдореЗрдВ рдЕрд╢рдХреНрдд рд▓реМрдЯрддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдЖрдк рд╕рдВрджрд░реНрдн рд╕реЗ рдЗрд╕ рдмрд┐рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрд╢рдХреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдЪреВрдВрдХрд┐ рд╕рднреА рдбрд┐рдмреНрдмреЗ рдмрд┐рдирдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ, рд╕рдВрджрд░реНрдн рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЬрдм рдЖрдк рдХрд┐рд╕реА рднреА рдмрд┐рди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢реВрдиреНрдп рдХреЗ рдЕрд░реНрде рдореЗрдВ рдЕрдВрдЬреАрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред
  2. рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ init рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдерд╛рдЧрдд рд╣реИ, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ postProcessAfterInitialization рдкрджреНрдзрддрд┐ рдореЗрдВред




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







рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХрд┐рд╕ рд▓рд┐рдП рд╣реИ, рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред



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



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



 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface InjectRandomInt { int min() default 0; int max() default 10; }
      
      







рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕реАрдорд╛ 0 рд╕реЗ 10 рддрдХ рд╣реЛрдЧреАред



рдлрд┐рд░, рдЖрдкрдХреЛ рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН InjectRandomInt рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреАрдирдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред



 @Component public class InjectRandomIntBeanPostProcessor implements BeanPostProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(InjectRandomIntBeanPostProcessor.class); @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { LOGGER.info("postProcessBeforeInitialization::beanName = {}, beanClass = {}", beanName, bean.getClass().getSimpleName()); Field[] fields = bean.getClass().getDeclaredFields(); for (Field field : fields) { if (field.isAnnotationPresent(InjectRandomInt.class)) { field.setAccessible(true); InjectRandomInt annotation = field.getAnnotation(InjectRandomInt.class); ReflectionUtils.setField(field, bean, getRandomIntInRange(annotation.min(), annotation.max())); } } return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } private int getRandomIntInRange(int min, int max) { return min + (int)(Math.random() * ((max - min) + 1)); } }
      
      







рдЗрд╕ рдмреАрдирдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдХреЛрдб рдХрд╛рдлреА рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИред



рдмреАрдирдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ рдПрдХ рдмреАрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╛ рддреЛ @Component рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕реЗ рдирд┐рдпрдорд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ xml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред



рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╣рд▓реЗ рд╕рдореВрд╣ рдиреЗ рдЕрдкрдирд╛ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд┐рдпрд╛ред рдЕрдм рджреВрд╕рд░рд╛ рд╕рдореВрд╣ рдЗрди рд╡рд┐рдХрд╛рд╕реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред



 @Component @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class MyBean { @InjectRandomInt private int value1; @InjectRandomInt(min = 100, max = 200) private int value2; private int value3; @Override public String toString() { return "MyBean{" + "value1=" + value1 + ", value2=" + value2 + ", value3=" + value3 + '}'; } }
      
      







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



рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред



рдореИрдВ рдПрд╡рдЧреЗрдиреАрдмреЛрд░рд┐рд╕реЛрд╡ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ ред рдЙрдирдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВрдиреЗ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред



рдореИрдВ рдЖрдкрдХреЛ JPoint 2014 рд╕реЗ рдЙрдирдХреА рд░рд┐рдкреЛрд░реНрдЯ рджреЗрдЦрдиреЗ рдХреА рднреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред



All Articles