Spring IOC 构造方法注入和设值注入的比较

来源:互联网 发布:用ant执行sql 语句 编辑:程序博客网 时间:2024/05/19 20:21

构造子注入的配置文件:

<bean id="orderService"
        class="com.lizjason.spring.OrderService">
        <constructor-arg index="0"ref="orderDAO"/>
    </bean>

参数说明:constructor-arg指明是构造方法注入,index="0",表示是构造方法中的第一个参数,如果只有一个参数,则可以不用设置这个属性值

在构造方法中增加参数,在初试化的时候先执行构造方法,就会把值注入进去。

和设置注入的比较

设置注入的配置文件:

<bean id="billingService"
       class="com.lizjason.spring.BillingService">
        <propertyname="billingDAO"
           ref="billingDAO">
    </bean>

 

都是利用SpringIOC进行注入值不过是方法不同,构造子注入的优势:

1.     在构造期即创建一个完整、合法的对象,对于这条Java设计原则,Type2无疑是最好的响应者。

2.     避免了繁琐的setter方法的编写,所有依赖关系均在构造函数中设定,依赖关系集中呈现,更加易读。

3.     由于没有setter方法,依赖关系在构造时由容器一次性设定,因此组件在被创建之后即处相对不变的稳定状态,无需担心上层代码在调用过程中执行setter方法对组件依赖关系产生破坏,特别是对于Singleton模式的组件而言,这可能对整个系统产生重大的影响。

4.     同样,由于关联关系仅在构造函数中表达,只有组件创建者需要关心组件内部的依赖关系。对调用者而言,组件中的依赖关系处于黑盒之中。对上层屏蔽不必要的信息,也为系统的层次清晰性提供了保证。

5.     通过构造子注入,意味着我们可以在构造函数中决定依赖关系的注入顺序,对于一个大量依赖外部服务的组件而言,依赖关系的获得顺序可能非常重要,比如某个依赖关系注入的先决条件是组件的DataSource及相关资源已经被设定。

不论使用的是哪一种方式,进行注入,调用的时候都要通过getBean方法来调用。Spring会根据配置文件来决定怎样去注入。


 

 

 

 

原创粉丝点击