创建应用对象之间协作关系的行为称为装配(wiring),这也是依赖注入的本质。
     
    
     
      Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,而开发者需要告诉Spring需要创建哪些bean并且如何将其装配在一起。
     
    
     
      1、Spring提供了三种主要的装配机制
     
    
- 
      
 在XML文件中进行显示装配;
 
- 
      
 在Java代码中显示装配;(JavaConfig)
 
- 
      
 隐式的bean发现机制和自动装配;(注解)
 
     
     
    
     
      2、如何选择装配机制?
     
    
     
      完全可以灵活配置。
     
    
     
      但作者建议尽可能地使用
      
       
        自动装配机制
       
      
      ,且显示配置越少越好。
     
    
     
      当必须显示配置bean(有些源码不是由你维护,而你需要为这些代码配置bean),作者推荐使用类型安全并且比XML更加强大的JavaConfig。
     
    
     
      只有当你想使用便利的XML命名空间,并且在JavaConfig中没有同样的实现时,才应该使用XML。
     
    
     
     
    
     
      3、Spring怎么实现自动化装配?
     
    
- 
      
 组件扫描(component scanning):Spring自动发现应用上下文所创建的bean;
 
- 
      
 自动装配(autowiring):Spring自动满足bean之间的依赖
 
     
      两者组合能发挥强大的威力,能够将显示配置降低到最少。
     
    
     
      需要了解的是,在自动装配时,不要在意装配的bean来自哪里。自动装配机制会考虑到容器中所有的bean,不管它是在JavaConfig or XML中声明还是通过组件扫描获取到的。只要bean在同一个Spring应用上下文中就行。
     
    
     
     
    
     
      4、几种开启组件扫描的方式:
     
    
     
      JavaConfig:
     
    
/*这是一个用于专用于设置配置的Java类*/
@Configuration  //声明这是配置类
@ComponentScan   //开启组件扫描
public class JavaConfigClass{ } 
     
     
     @ComponentScan  默认扫描与配置类相同的包(肯定就包括子包啦)。
    
     
      @ComponentScan(basePackages={“Package1”,“Package2”})也可以通过basePackages属性指定一个或者多个基础包,但是这样并不安全。
     
    
     
      @ComponentScan(basePackages={AAA.class,BBB.class}),这些类所在包会作为组件扫描的基础包。还可以专门创建一个空标记接口,用于标记基础包,这样可以保持对重构的友好。
     
    
     
      XML:
     
    
<context:component-scan base-package="com.biguo.xxx"/>
     
     
    
     
     
    
     
      5、自动装配中的注解
     
    
     
      @Component(“String ID”):该类会作为组件类,并告知Spring要为这个类创建bean。
     
    
     
      Spring应用上下文中所有的bean都会给定一个ID,若没有明确指定,Spring会根据类名为其指定一个ID,默认为把类名第一个字母小写。
     
    
     
      (JavaConfig中,@Named(“String ID”)效果相同)
     
    
     
     
    
     
      @Autowired
     
    
     
      常用于构造器、setter方法,当Spring创建它们所在对象的bean时,会传入一个相应参数类型的bean,即自动满足所创建bean 的(对另一个bean的)依赖。
     
    
     
      (这里就要考虑所依赖的bean存在不存在、有多少个的问题啦)
     
    
     
      (JavaConfig中,为@Inject)
     
    
     
     
    
     
      6、JavaConfig中声明bean
     
    
     
      @Bean——告诉Spring这个方法返回一个对象,该对象要注册为Spring应用上下文中的bean,bean的默认ID和这个方法名一致,也可以用name属性自定义啦。
     
    
     
      Spring会拦截所有对@Bean注解的方法的调用,确保直接返回这个方法创建的bean,而不是让其执行实际调用。 (这个bean还可以重复使用,因为Spring默认单例模式)
     
    
     
     
    
     
      7、关于混合配置
     
    
     
      JavaConfig中引用XML配置——@Import(xx.class)、@ImportResource(“classpath:xxx.config.xml”)
     
    
     
      XML配置中引用JavConfig~~~
     
    
     
     
    
转载于:https://www.cnblogs.com/bigbigbigo/p/8357521.html
 
