依赖注入(Dependency Injection,DI )与控制的逆转意义相同,是从两个角度描述的相同概念。
如果一个JAVA实例需要另一个JAVA实例,则传统方法是调用者创建被调用者的实例。 例如,您曾使用new关键字获取被调用方的实例。 使用Spring框架时,调用方不再创建调用方的实例,而是由Spring容器创建。 这叫做控制逆转。
在创建调用方的实例时,Spring容器会自动将调用方所需的对象实例注入到调用方中。 这样,调用方就会通过Spring容器获取调用方的实例。 这称为依赖注入。
注入依赖主要有两种实现方式,分别是属性setter注入和结构方法注入。 具体介绍如下。
1 )属性设置注入
IoC容器使用setter方法注入到依赖的实例中。 可以通过调用无参数构造函数或无参数静态工厂方法实例化bean,然后调用该bean的setter方法来实现基于setter的DI。
创建人员服务界面
在springDemo01项目的com.mengma.ioc包下创建一个名为PersonService的接口。 此接口包含addPerson ()方法,如下所示:
package com.mengma.ioc; publicinterfacepersonservice { publicvoidaddperson (; } 2.创建接口实现类PersonServiceImpl
在com.mengma.ioc包下创建一个名为PersonServiceImpl的类,以实现PersonService接口,如下所示:
package com.mengma.ioc; publicclasspersonserviceimplimplementspersonservice//定义接口声明private PersonDao personDao;//提供依赖于注入publicvoidsetpersondao (person Dao )的set ) )方法) { this.personDao=personDao; 如何实现人员服务接口@Override public void addPerson () { personDao.add; 调用PersonDao的add (方法system.out.println ) (' addPerson ) )执行的…' ); }在上面的代码中,首先声明了personDao对象,并在其中添加了用于依赖注入的setter方法。 然后调用personDao接口的addPerson (实现方法,并在方法中为save )方法输出语句。
将配置信息添加到applicationContext.xml
将实例化PersonServiceImpl类的bean元素添加到applicationContext.xml配置文件中,然后将personDao的实例注入personService中,如下所示:
bean id=' person service ' class=' com.Meng ma.IOC.personserviceimpl '! 将人员Dao实例注入人员服务实例--property name='人员Dao ' ref='人员Dao '//bean4.创建测试方法
在FirstTest类中创建一个名为test2()的方法。 编辑后如下。
publicvoidtest2((//spring定义配置文件的路径string XML path=' application context.XML ' ); 初始化Spring容器,并配置文件applicationcontextapplicationcontext=newclasspathxmlapplicationcontext (XML path ); //容器中的人员服务实例人员服务=(人员服务)应用程序上下文. get bean (人员服务' ); 人员服务的添加人员(方法人员服务. add人员); )2)结构方法注入
是指IoC容器使用结构方法被依赖的例子。 基于构造函数的DI是通过调用带参数的构造方法实现的,每个参数都表示依赖关系。
2.1创建接口实现类PersonServiceImpl
package com.mengma.ioc; publicclasspersonserviceimplimplementspersonservice//定义接口声明private PersonDao personDao; 提供依赖于注入//publicpersonserviceimpl (persondaopersondao )的带参数的构造函数({ this.personDao=personDao; 如何实现人员服务接口@Override public void addPerson () { personDao.add; 调用PersonDao的add (方法system.out.println ) (' addPerson ) )执行的…' ); } 3.1将配置信息添加到application context.XML
bean id=' person service ' class=' com.Meng ma.IOC.personserviceimpl '! 将人员Dao实例注入人员服务实例--constructor-arg ref='人员Dao '/bean3)接口注入