Spring的四种依赖注入方式实例
来源:互联网 发布:sop16 单片机 编辑:程序博客网 时间:2024/06/07 17:13
在我们写代码的过程中,通常会用new来产生一个对象,但是这样操作的后果会使得代码难于管理。
而Spring框架为我们提供了一个控制反转(IOC,Inversion of Control)的思想。意思是原来由程序员new出来的对象,现在不这样做了,而是把它“反转”。由Spring容器去产生管理这些对象。而依赖注入(DI,Dependency Injection)就是实现控制反转的其中一种方式。
下面是四种依赖注入方式的实例:
1、set注入:
这是一种简单的注入方式,首先新建一个名叫IOCMain的类,类中需要实例化一个IOCdependency的对象。然后定义一个IOCdependency的成员变量,并建立get和set方法。
private IOCdependency IOCdependency;// 第一种方式,set方式public void setIOCdependency(IOCdependency iocdenpendency) {this.IOCdependency = iocdenpendency; }public IOCdependency getIOCdependency() {return IOCdependency;}public void showOk(){IOCdependency.output();}
随后编写Spring的配置文件applicationContext.xml。<bean>中的name为类的一个别名,而class为类的完整名称。
由于在IOCMain的类中存在IOCdependency属性,因此要在<bean>中设置属性<property>,name为属性的名称,
ref指向名为IOCdependency的bean
<!-- 第一种方法,set方法依赖注入配置 --><bean id="IOCMain" class="com.elish.model.IOCMain"><!--依赖注入,注入当前属性 --><property name="IOCdependency" ref="IOCdependency"></property></bean><bean name="IOCdependency" class="com.elish.model.IOCdependency"></bean>
2、构造器注入:
构造器注入指的是在类中构造带参数的构造方法实现类的注入,在这次的例子中就是在IOCMain的类中创建IOCdependency的构造方法,通过该构造方法实现注入,而不需要set函数。
// 第二种方式,构造器方式,在构造方法中调用IOCdepedency,达到注入的效果 public IOCMain(IOCdependency iocdependency){ this.IOCdependency=iocdependency; }
在配置文件中,不再用<property>标签,而是用<constructor-arg>标签代替,其中ref指向IOCdependency的bean,当存在多个参数时,有可能存在某些参数是同样类型的情况,为了确定参数的位置,可以为每个参数设置索引index,确定参数的位置
<!-- 第二种方法,构造器方法依赖注入配置 --><bean id="IOCMain" class="com.elish.model.IOCMain"><!--创建构造器注入,如果主类有带参的构造方法则需添加此配置 --><constructor-arg ref="IOCdependency" index="0"></constructor-arg></bean> <bean name="IOCdependency" class="com.elish.model.IOCdependency"></bean>
3、静态工厂的方式注入
通过建立静态工厂的方式进行注入,首先创建一个静态工厂IOCstaticFactory的类,然后在工厂类中创建getStaticFactory()的方法
public class IOCstaticFactory {public static final IOCdependency getStaticFactory(){return new IOCdependency();}}在IOCMain中,创建与set方法注入相同的set方法。
// 第三种方式,静态工厂方式,在工厂类中返回静态IOCFactory对象public void setIOCdependency(IOCdependency iocdenpendency) {this.IOCdependency = iocdenpendency; }与上面两个方法不同,这次在配置文件中不会直接定义IOCdependcy的bean,而是定义静态工厂IOCstaticFactory的bean,在这个bean中,需要配置factory-method="getStaticFactory"来指定调用哪个工厂方法。并在IOCMain的bean中定义指向静态工厂bean的<property>。
<!-- 第三种方法,静态工厂方法 --><bean id="IOCMain" class="com.elish.model.IOCMain"><!--使用静态工厂的方法注入对象,对应下面的配置文件 --><property name="IOCdependency" ref="IOCdependency"></property></bean><bean name="IOCdependency" class="com.elish.model.IOCstaticFactory" factory-method="getStaticFactory"></bean>
4、动态工厂的方式注入
与静态工厂方式注入的方法不同,它需要先创建工厂类再调用方法
public class IOCFactory {public IOCdependency getFactory(){return new IOCdependency();}}
这里也需要set方法
// 第四种方式,实体工厂方式,在工厂类中返回实体IOCFactory对象public void setIOCdependency(IOCdependency iocdenpendency) {this.IOCdependency = iocdenpendency; }
与静态工厂的方法不同,这里需要定义IOCdependency的bean,并指定factory-bean和factory-method
<!-- 第四种方法,实体工厂方法 --><bean id="IOCMain" class="com.elish.model.IOCMain"><!-- 使用实例工厂的方法注入对象,对应下面的配置文件 --><property name="IOCdependency" ref="IOCdependency"></property></bean><!-- 此处获取对象的方式是从工厂类中获取实例方法 --><bean name="IOCFactory" class="com.elish.model.IOCFactory"></bean><bean name="IOCdependency" factory-bean="IOCFactory"factory-method="getFactory"></bean>
5、总结:在通常情况下,用第一种和第二种的情况较多,并且要多加锻炼才能熟练掌握
阅读全文
0 0
- Spring的四种依赖注入方式实例
- spring依赖注入的四种方式
- Spring依赖注入的四种方式
- spring 依赖注入的四种方式
- spring四种依赖注入的方式
- spring依赖注入的四种方式
- spring的四种依赖注入方式
- Spring 的四种方式依赖注入
- Spring的四种依赖注入方式
- spring依赖注入的四种方式
- spring的四种依赖注入的方式
- spring四种依赖注入方式
- spring四种依赖注入方式
- spring四种依赖注入方式
- spring四种依赖注入方式
- spring四种依赖注入方式
- spring四种依赖注入方式
- spring四种依赖注入方式
- 用最简单快捷的方法用js写一个计算器
- HashMap的实现原理
- brctl网桥配置命令、网卡的链路聚合
- Log4j类详解(org.apache.log4j.Logger)
- hibernate学习笔记
- Spring的四种依赖注入方式实例
- Unity+Behavior Tree行为树 Behavior Designer 行为树介绍(二)
- 8月份计划
- 对比 tf.layers.conv2d_transpose和tf.nn.conv2d_transpose区别
- 相机采集高速运行物体,曝光时间设定以解决图像拖影现象
- 再谈CVE-2017-7047 Triple_Fetch和iOS 10.3.2沙盒逃逸
- Codeforces 35E Parade(扫描线 线段树||STL)
- 判别式模型与生成式模型的区别
- 选择排序