Spring依赖注入

系统 1466 0

转自: http://ganshisheng.iteye.com/blog/438608

一、依赖注入(DI)简介
依赖注入背后的基本原理是对象之间的依赖关系,可以通过以下几种方式来实现:构造器的参数、工厂方法的参数,或给由构造函数或者工厂方法创建的对象设置属性。因此,容器的工作就是创建bean时注入那些依赖关系。相对于由bean自己来控制其实例化、直接在构造器中指定依赖关系或者类似服务定位器模式这3种自主控制依赖关系注入的方法来说,控制从根本上发生了倒转,这也正是控制反转名字的由来。

依赖注入主要有两种注入方式,即构造器注入和Setter注入。

1、构造器注入
基于构造器的依赖注入是通过调用带参数的构造器来实现,每个参数代表着一个依赖。下面展示了用构造器参数来注入依赖关系的例子。

先创建一个对象(bean)

Java代码 收藏代码
  1. public class HelloWorld{
  2. private Stringmsg;
  3. //需要一个默认无参构造器
  4. public HelloWorld(){}
  5. public HelloWorld(Stringmsg){
  6. this .msg=msg;
  7. }
  8. public StringgetMsg(){
  9. return msg;
  10. }
  11. public void setMsg(Stringmsg){
  12. this .msg=msg;
  13. }
  14. }


再修改配置文件applicationContext.xml,实例化bean

Java代码 收藏代码
  1. <beanid= "hello" class = "com.spring.demo.HelloWorld" >
  2. <constructor-argindex= "0" >
  3. <value>HelloWorld!</value>
  4. </constructor-arg>
  5. </bean>


最后测试是否能够得到注入的bean,并打印出对象的属性。
Java代码 收藏代码
  1. public static void main(String[]args){
  2. //读取配置文件,获得BeanFactory
  3. ApplicationContextcontext= new ClassPathXmlApplicationContext( "applicationContext.xml" );
  4. BeanFactoryfactory=context;
  5. HelloWorldhello=(HelloWorld)factory.getBean( "hello" );
  6. System.out.println(hello.getMsg());
  7. }


2、Setter注入
通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即可实现基于setter的依赖注入。

创建一个对象

Java代码 收藏代码
  1. public class HelloWorld{
  2. private Stringmsg;
  3. public StringgetMsg(){
  4. return msg;
  5. }
  6. public void setMsg(Stringmsg){
  7. this .msg=msg;
  8. }
  9. }


修改配置文件applicationContext.xml,实例化bean

Java代码 收藏代码
  1. <beanid= "helloBean" class = "com.spring.demo.HelloWorld" >
  2. <propertyname= "msg" value= "HelloWorld!" />
  3. </bean>


测试类,获得注入的bean

Java代码 收藏代码
  1. public static void main(String[]args){
  2. //读取配置文件,实例化IOC容器
  3. ApplicationContextcontext= new ClassPathXmlApplicationContext( "applicationContext.xml" );
  4. BeanFactoryfactory=context;
  5. HelloWorldhello=(HelloWorld)factory.getBean( "helloBean" );
  6. System.out.println(hello.getMsg());
  7. }

3. 接口注入( 不推荐


处理bean依赖关系通常按以下步骤进行:

1.根据定义bean的配置创建并初始化BeanFactory实例

2.每个bean的依赖将以属性、构造器参数、或静态工厂方法参数的形式出现。当这些bean被实际创建时,这些依赖也将会提供给该bean。

3.每个属性或构造器参数既可以是一个实际的值,也可以是对该容器中另一个bean的引用。

4.每个指定的属性或构造器参数值必须能够被转换成特定的格式或构造参数所需的类型。

Spring会在容器被创建时验证容器中每个bean的配置,包括验证那些bean所引用的属性是否指向一个有效的bean。在bean被实际创建之前,bean的属性并不会被设置。伴随着bean被实际创建,作为该bean的依赖bean以及依赖bean的依赖bean也将被创建和分配。

Spring依赖注入


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论