Spring依赖注入原理

基于接口的编程,将服务端和数据库端完全隔离开,只由接口相联系。
如定义一个<bean>:

      <bean id = "personDaoBean" class= "person.dao.impl.PersonDaoBean" />
      <bean id = "helloBean" class= "output.test.impl.HelloBean" >
            <property name = "personDao" ref= "personDaoBean" ></property >
      </bean >

其中,第一个<bean>声明了一个类 PersonDaoBean,这是接口 PersonDao 的一个实现类。
第二个<bean>生命了一个类 HelloBean,这个类中定义了一个私有变量,变量类型便是接口 PersonDao。如果要想使用 PersonDaoBean 中的方法,就必须要向Spring容器指出,在第二个<bean>中,接口 PersonDao 的实现类是 PersonDaoBean。这就是<property>的作用,name 是第一个 bean 的 id, ref 是第一个 bean 的实现方法。

HelloBean 类:

public class HelloBean implements Hello {

      private PersonDao personDao;

      public PersonDao getPersonDao() {
            return personDao;
     }

      public void setPersonDao( PersonDao personDao ) {  //必须要有setter方法,否则注入不进去。相当于是将 PersonDaoBean 作为参数,来 set 接口 PersonDao。那么在后面,尽管是使用的接口的方法,但是实际上,执行的是 PersonDaoBean 中的方法。
            this. personDao = personDao;
     }

      public void output(){
            personDao.query();
            System. out.println( "hello");
     }
}

PersonDao 接口:

package person.dao;

public interface PersonDao {

      public abstract void query();

}

PersonDaoBean 类:

package person.dao.impl;

import person.dao.PersonDao;

public class PersonDaoBean implements PersonDao {

      public void query(){
           System. out.println( "PersonDaoBean.query" );
     }
}

这样,就实现了将 PersonDaoBean 注入到了 HelloBean 中。同时, HelloBean 中的代码仅仅提到了接口 PersonDao,没有出现过 PersonDaoBean。将基于实现类的耦合变成了基于接口的耦合。实际应用中,如果需求变了,可以很方便的换实现类,代码不用变。
IOC控制反转,就是指的将某一个接口的具体实现类的控制,从调用类中移除,转交给第三方(Spring容器)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值