一、依赖注入(DI)简介
依赖注入背后的基本原理是对象之间的依赖关系,可以通过以下几种方式来实现:构造器的参数、工厂方法的参数,或给由构造函数或者工厂方法创建的对象设置属性。因此,容器的工作就是创建bean时注入那些依赖关系。相对于由bean自己来控制其实例化、直接在构造器中指定依赖关系或者类似服务定位器模式这3种自主控制依赖关系注入的方法来说,控制从根本上发生了倒转,这也正是控制反转名字的由来。
依赖注入主要有两种注入方式,即构造器注入和Setter注入。
二、构造器注入
基于构造器的依赖注入是通过调用带参数的构造器来实现,每个参数代表着一个依赖。下面展示了用构造器参数来注入依赖关系的例子。
先创建一个对象(bean)
public class HelloWorld {
private String msg;
//需要一个默认无参构造器
public HelloWorld(){}
public HelloWorld(String msg){
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
再修改配置文件applicationContext.xml,实例化bean
<bean id="hello" class="com.spring.demo.HelloWorld">
<constructor-arg index="0">
<value>HelloWorld!</value>
</constructor-arg>
</bean>
最后测试是否能够得到注入的bean,并打印出对象的属性。
public static void main(String[] args){
//读取配置文件,获得BeanFactory
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
BeanFactory factory = context;
HelloWorld hello = (HelloWorld)factory.getBean("hello");
System.out.println(hello.getMsg());
}
三、Setter注入
通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即可实现基于setter的依赖注入。
创建一个对象
public class HelloWorld {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
修改配置文件applicationContext.xml,实例化bean
<bean id="helloBean" class="com.spring.demo.HelloWorld">
<property name="msg" value="Hello World!"/>
</bean>
测试类,获得注入的bean
public static void main(String[] args){
//读取配置文件,实例化IOC容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
BeanFactory factory = context;
HelloWorld hello = (HelloWorld)factory.getBean("helloBean");
System.out.println(hello.getMsg());
}
处理bean依赖关系通常按以下步骤进行:
1.根据定义bean的配置创建并初始化BeanFactory实例
2.每个bean的依赖将以属性、构造器参数、或静态工厂方法参数的形式出现。当这些bean被实际创建时,这些依赖也将会提供给该bean。
3.每个属性或构造器参数既可以是一个实际的值,也可以是对该容器中另一个bean的引用。
4.每个指定的属性或构造器参数值必须能够被转换成特定的格式或构造参数所需的类型。
Spring会在容器被创建时验证容器中每个bean的配置,包括验证那些bean所引用的属性是否指向一个有效的bean。在bean被实际创建之前,bean的属性并不会被设置。伴随着bean被实际创建,作为该bean的依赖bean以及依赖bean的依赖bean也将被创建和分配。
分享到:
相关推荐
NULL 博文链接:https://shmilyaw-hotmail-com.iteye.com/blog/2169569
spring依赖注入底层详解,很不错的资源,欢迎大家来下载学习。
javaEE 开发中 现在最成熟的框架之一应该就是spring了 spring框架最强大的地方就是实现了依赖注入 也叫控制反转 最近的一个项目中用的就是 spring框架 spring框架是工厂模式的应用结合了MVC的设计思想 大家可以...
spring 依赖注入三种方式测试源码,测试细节参考博文http://blog.csdn.net/u010679383/article/details/71305400
NULL 博文链接:https://huangminwen.iteye.com/blog/1041743
Spring依赖注入——java项目中使用spring注解方式进行注入.rar
java 无需数据库 简单实例 如何实现Spring依赖注入 AOP
Spring 三种依赖注入方式.doc Spring 三种依赖注入方式.doc
该资源包含了一个利用spring实现的依赖注入的案例,简单易懂。
Spring依赖注入使用构造设注入demo。完整可运行。
Spring依赖注入检查,适合初学者进一步了解Spring框架。
模仿Spring依赖注入,代码详细,简单,明了
详细阐明spring依赖注入工作原理,基于注解的一个完整例子,当然数据库需要自己去创建
本项目为Java项目,使用Spring实现依赖注入,实现采用ApplicationContext,不再直接使用XmlBeanFactory方式。适合初学者了解Spring依赖注入的实现。
Spring依赖注入使用setter设注入demo。完整可运行。
Spring依赖注入使用实例工厂设注入demo。完整可运行。
NULL 博文链接:https://zhangyulong.iteye.com/blog/856986
spring依赖注入的几种方式
对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的 依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程(将依赖关系注入到对象中) ,spring的...
Spring Ioc 注解 依赖注入