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的依赖关系:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
   <!--bean 的描述-->
<beans>

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

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

        基于XML形式的装载方式:

<bean id="beanDefine" class="com.bilibili.spring.BeanDefine"/>

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

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

}

  • 依赖注入的变化

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

<Bean id="beanDefine" class="com.bilibili.spring.BeanDefine">
    <property name="dependencyBean" ref="dependencyBean"/>
</Bean>
<bean id="dependencyBean" class="com.bilibili.spring.depencyBean"/>

       在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形式的<context:component-scan base-package="" />,它会扫            描指定包路径下带有@Service 、 @Repository、@Controller、@Component 等注解的类,          将这些类装载到IoC容器。

        @Import 对应XML形式的<import resourse="" />,导入其他的配置文件

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

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

思考

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明雨星云

感谢,我会继续创作更优质作品

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值