Bean装配方式的升级

基于XML配置的方式很好地完成了对象声明周期的描述和管理,但是随着项目规模不断扩大,XML的配置也逐渐增多,使得配置文件难以管理。另一方面,项目中依赖关系越来越复杂,配置文件变得难以理解。这个时候迫切需要一种方式来解决这类问题。

随着JDK1.5带来的注解支持,Spring从 2.x 开始,可以使用注解的方式来对Bean进行声明和注入,大大减少了XML的配置量。

记得当时大家争议的话题是:Spring采用注解配置和XML配置那个更好?

Spring升级到 3.x 后,提供了JavaConfig的能力,它可以完全取代XML,通过Java代码的方式来完成Bean的注入。所以,现在我们使用的Spring Framework 或者 Spring Boot ,已经看不到XML配置的存在了。

JavaConfig的出现给开发者带来了很多的变化

  • XML配置形式的变化 

        在早期的Spring中,我们会基于XML配置文件来描述Bean及Bean的依赖关系:



   

          使用JavaConfig形式之后,只需要使用@Configuration注解即可,它等同于XML的配置形式:

@Configuration
public class SpringConfigClass {
    // Bean 的描述
}
  • Bean装载方式的变化

        基于XML形式的装载方式:

        基于JavaConfig的配置形式,可以通过@Bean注解来将一个对象注入IoC容器中,默认情况            下采用方法名称作为该Bean的id

@Configuration
public class SrpingConfigClass {
    
    // Bean 的描述
    @Bean
    public BeanDefine beanDefine() {
        return new BeanDefine();
    }

}

  • 依赖注入的变化

       在XML形式中,可以通过三种方式完成依赖注入,比如setter方式注入:


    

       在JavaConfig中,可以这样来表述:

@Configuration
public class SpringConfigClass{
    
    @Bean
    public BeanDefine beanDefine() {
        BeanDefine beanDefine = new BeanDefine();
        beanDefine.setDependencyBean(dependencyBean());
        return beanDefine;
    }
    
    @Bean
    public DependencyBean dependencyBean() {
        return new DependencyBean();
    }
}
  • 其他配置的变化

        除了前面说的几种配置,还有其他常见的配置,比如:

        @ComponentScan对应XML形式的,它会扫            描指定包路径下带有@Service 、 @Repository、@Controller、@Component 等注解的类,          将这些类装载到IoC容器。

        @Import 对应XML形式的,导入其他的配置文件

       虽然通过注解的方式来装配Bean,可以在一定程度上减少XML配置带来的问题,但是从某一方面来说它知识换汤不换药,本质问题仍然没有解决,比如:

  • 依赖太多。Spring可以整合几乎所有常见的技术框架,比如JSON,MyBatis,Redis,Log等不同的依赖包的版本很容易导致版本兼容的问题。 
  • 配置太多。以Spring使用JavaConfig方式整合MyBatis为例,需要配置注解驱动、配置数据源、配置MyBatis、配置事务管理器等,这些只是集成一个技术组件需要的基础配置,在一个项目中这类配置很多,开发者需要做很多类似的重复工作。
  • 运行和部署很烦琐。需要先把项目打包,再部署到容器上。

思考

如何让开发者不再需要关注这些问题,而专注于业务呢?

你可能感兴趣的:(JAVA,Bean装配方式,java,bean)