Spring实战随笔(二)装配Bean

之前学习了Spring的核心概念,其中DI是spring最基本要素,因为在Spring中随时都在使用。DI创建了对象之间的协作关系,称之为装配,Spring中装配bean就是配置Spring容器的过程。

有三种方式配置容器:
1.隐式的bean发现机制和自动配置
2.在JAVA中显式配置
3.在XML中显式配置

根据项目需要来选择相应的配置方案。

- 自动化装配Bean

Why:方便

Spring从两个角度实现自动化装配:

  • 组件扫描: Spring自动发现ApplicationContext中创建的bean
    @Component: Spring寻找带该注解的类,并为其创建bean,这个注解不会开启组件扫描。
    @ComponentScan: 这个注解会扫描当前类包+子包下所有带@Component注解的类创建bean,并且它会开启组件扫描。效果等同于用XML的.
    Spring自动创建的bean id默认为class名,可以自己@Component("tricker")来命名。

  • 自动装配: Spring自动满足bean之间的依赖
    @Autowired: 该注解能放在类中任一方法上,会自动装配需要的所有bean,如果找不到匹配的会自动抛出异常,如果找到多个也会抛出异常需要明确指定是哪个。

-显式配置Bean

Why: 有时候自动化配置行不通,譬如使用了第三方库,不可能在第三方库类上加注解

- 在JAVA中显式配置Bean

JavaConfig方式,通过@Configuration @Bean显式配置。

@Configuration
public class PaymentJavaConfig {

    @Bean
    public ILogger getIlogger() {
        return new ConsoleLogger();
    }

    @Bean
    public PaymentActionMixed getPaymentActionMixed(ILogger logger)     {
        return new PaymentActionMixed(logger);
    }
}
- 在XML中显式配置Bean



  
      
      
    
  
      
      
  

还有些c命名空间(c:cd-ref)、p命名空间(p:compactDisc-ref)、util命名空间
缺点:无法校验,安全性太差,不会在编译期就检查该类是否存在(不过如果用Spring Tool Suite的话可以);而且比JAVA Config方式要麻烦很多,还需要声明XSD

- JAVA Config和XML混合使用
  • JavaConfig中引用XML声明的bean
@Configuration
// 导入通过JAVAConfig声明的bean:CDPlayerConfig
@Import(CDPlayerConfig.class)
// 导入cd-config.xml中声明的bean
@ImportResource("classpath:cd-config.xml")
public class SoundSystemConfig {
}
  • XML中引用JavaConfig声明的bean



  
  
  
  
    
  

- Summary

尽量用自动化配置bean,避免显示配置带来的代码和维护成本。如果一定要显示,JAVAConfig优于XML。这里学习了Spring的集中装配方式,但是Spring还有更高的装配的需求,接下来继续学习Spring高级装配。

- W3CSchool参考链接

你可能感兴趣的:(Spring实战随笔(二)装配Bean)