Spring中的依赖注入

什么是依赖注入,以及为什么要使用依赖注入?

简单的解释,我们知道,如果我们有两个java类A和B的话,如果我需要在A中使用B的方法,那么最寻常的做法是在A类中new一个B类的对象,然后调用这个对象的各种方法。如果只有几个类还好,直接写在代码中就是了,但是如果有几十个几百个类呢?各个类之间相互调用。或许你觉得这也没什么,但是可怕的地方在于,如果需求变动,需要修改它们之间 的调用关系了,这时候该怎么办?没有一个人愿意在几百个类里一个一个找,然后一个一个改代码,这时候,或许你就想到要使用依赖注入技术了。

从名字上理解,所谓依赖注入(Dependency Injection),即组件之间的依赖关系由容器在运行期决定,形象地说,即由容器动态地将某种依赖关系注入到组件之中。DI还有一个名字,叫做控制反转(IOC),所谓控制反转,说的就是容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在。控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。

还是拿上面A和B的例子来说。使用了Spring后,A和B都在Spring的接管之下了,现在A要使用B的方法,但是A并不自己去直接调用B,而是告诉Spring,我需要一个B,你给我吧,然后Spring在自己的配置文件中找到B所对应的java类,返回一个相应的对象给A。如果以后A需要用到别的了,直接向Spring要一个C、D之类的,至于B,C,D是怎么创建的,A并不关心,A只要知道拿来就能用就可以了。

这个用专业的说法来说,叫做降低了代码之间的耦合,不同功能的组件并不在自身之内调用其他的组件,不同的组件是依靠Spring以一种松散的方式结合在一起的,极大的提高了代码的灵活性和复用性。

在Spring中的具体实现:

在Spring中,每一个组件(或者说类),都被Spring接管,Spring把它们叫做bean,Spring实例化Bean有三种方式,以下是三种方式的简要介绍。

1.使用类构造器实例化  [默认的类构造器]
<bean id=“orderService" class="cn.itcast.OrderServiceBean"/>

2.使用静态工厂方法实例化
<bean id="personService" class="cn.itcast.service.OrderFactory" factory-method="createOrder"/>
public class OrderFactory {
    public static OrderServiceBean createOrder(){   // 注意这里的这个方法是 static 的!
        return new OrderServiceBean();
    }
}

3.使用实例工厂方法实例化:
<bean id="personServiceFactory" class="cn.itcast.service.OrderFactory"/>
<bean id="personService" factory-bean="personServiceFactory" factory-method="createOrder"/>
public class OrderFactory {
    public OrderServiceBean createOrder(){
        return new OrderServiceBean();
    }
}

往Bean中注入其他的Bean有以下几种方法:

基本类型对象注入:
<bean id="orderService" class="cn.itcast.service.OrderServiceBean">
    <constructor-arg index=“0type=“java.lang.Stringvalue=“xxx/>//构造器注入
    <property name=“namevalue=“zhao/>//属性setter方法注入
</bean>

注入其他bean:
方式一
<bean id="orderDao" class="cn.itcast.service.OrderDaoBean"/>
<bean id="orderService" class="cn.itcast.service.OrderServiceBean">
    <property name="orderDao" ref="orderDao"/>
</bean>

方式二(使用内部bean,但该bean不能被其他bean使用)
<bean id="orderService" class="cn.itcast.service.OrderServiceBean">
    <property name="orderDao">
        <bean class="cn.itcast.service.OrderDaoBean"/>
    </property>
</bean>


这些是Spring中Bean的简单配置,更多的详细配置,可以参考这篇文章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值