0%
  
  
  
    
  
  
  
  
    
    
      
      
      
    
    
      
    
      
    
    
    
    
        声明式注入
@Configuration + @Bean
1 2 3 4 5 6 7
   | @Configuration public class QuickstartConfiguration {     @Bean     public Person person() {         return new Person();     } }
   | 
 
@Component + @ComponentScan
1 2 3
   | @Configuration @ComponentScan("com.linkedbear.spring.annotation.c_scan") public class ComponentScanConfiguration
   | 
 
@Import
1 2
   | @Import({Boss.class, BartenderConfiguration.class}) public @interface EnableTavern
  | 
 
配置式注入
<bean>标签声明
1
   | <bean id="person" class="com.linkedbear.spring.basic_dl.a_quickstart_byname.bean.Person"/>
   | 
 
编程式注入 BeanDefinition
ImportBeanDefinitionRegistrar
1 2 3 4 5 6 7
   | public class WaiterRegistrar implements ImportBeanDefinitionRegistrar {          @Override     public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {         registry.registerBeanDefinition("waiter", new RootBeanDefinition(Waiter.class));     } }
  | 
 
手动构造 BeanDefinition 注入
1 2 3 4 5 6 7
   | AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
  BeanDefinition personDefinition = BeanDefinitionBuilder.rootBeanDefinition(Person.class)         .addPropertyValue("name", "zhangsan").getBeanDefinition(); ctx.registerBeanDefinition("person", personDefinition);
  ctx.refresh();
   | 
 
借助 BeanDefinitionRegistryPostProcessor 注入
1 2 3 4
   | public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {     registry.registerBeanDefinition("animalNameSetterPostProcessor",              new RootBeanDefinition(AnimalNameSetterPostProcessor.class)); }
  |