spring依赖注入
来源:互联网 发布:淘宝客推广宝贝 编辑:程序博客网 时间:2024/06/06 09:47
一、依赖注入(DI)简介
依赖注入背后的基本原理是对象之间的依赖关系,可以通过以下几种方式来实现:构造器的参数、工厂方法的参数,或给由构造函数或者工厂方法创建的对象设置属性。因此,容器的工作就是创建bean时注入那些依赖关系。相对于由bean自己来控制其实例化、直接在构造器中指定依赖关系或者类似服务定位器模式这3种自主控制依赖关系注入的方法来说,控制从根本上发生了倒转,这也正是控制反转名字的由来。
依赖注入主要有两种注入方式,即构造器注入和Setter注入。
二、构造器注入
基于构造器的依赖注入是通过调用带参数的构造器来实现,每个参数代表着一个依赖。下面展示了用构造器参数来注入依赖关系的例子。
先创建一个对象(bean)
再修改配置文件applicationContext.xml,实例化bean
最后测试是否能够得到注入的bean,并打印出对象的属性。
三、Setter注入
通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即可实现基于setter的依赖注入。
创建一个对象
修改配置文件applicationContext.xml,实例化bean
测试类,获得注入的bean
处理bean依赖关系通常按以下步骤进行:
1.根据定义bean的配置创建并初始化BeanFactory实例
2.每个bean的依赖将以属性、构造器参数、或静态工厂方法参数的形式出现。当这些bean被实际创建时,这些依赖也将会提供给该bean。
3.每个属性或构造器参数既可以是一个实际的值,也可以是对该容器中另一个bean的引用。
4.每个指定的属性或构造器参数值必须能够被转换成特定的格式或构造参数所需的类型。
依赖注入背后的基本原理是对象之间的依赖关系,可以通过以下几种方式来实现:构造器的参数、工厂方法的参数,或给由构造函数或者工厂方法创建的对象设置属性。因此,容器的工作就是创建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也将被创建和分配。
所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。当spring容器启动后,spring容器初始化,创建并管理bean对象,以及销毁它。所以我们只需从容器直接获取Bean对象就行,而不用编写一句代码来创建bean对象。这种现象就称作控制反转,即应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。虽然平时只需要按要求将bean配置到配置文件中,但是了解其实现过程对理解spring的实现原理是有好处的,下面就是模拟spring实现依赖注入的过程
0 0
- Spring依赖注入:注解注入
- spring 的依赖注入
- Spring依赖注入实践经验
- Spring的依赖注入
- Spring依赖注入
- spring(依赖注入-DI)
- spring依赖注入
- spring依赖注入
- 白话spring依赖注入
- Spring依赖注入方式
- Spring的依赖注入
- Spring依赖注入
- Spring依赖注入方式
- Spring 依赖注入
- spring依赖注入方式
- spring的依赖注入
- Spring依赖注入方式
- Spring依赖注入方式:
- Uva 12018 Juice Extractor dp
- 命令行运行java
- Xcode 与 iOS SDK 版本
- 几个常见的宏定义
- ZXing是一个开源Java类库用于解析多种格式的条形码和二维码
- spring依赖注入
- ACE_Message_Queue和spawn实现(生产者/消费者)(V2.00)
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
- 刚装的matlab R2010a运行quad2d时提示找不到指定的程序! 提示信息: libmwblas: load error: csrot Caught
- 【标程】山东建筑大学第一届ACM程序设计竞赛(2013.12.1)题解
- 学习hadoop的好文章
- 关于耳机标准
- 实现C++连接MYSQL数据库的例子
- request.fetcontextPath() 设置相对路径问题!