深入理解Spring4框架(四)——依赖
2016-07-24 21:31
477 查看
一个典型的企业应用不止包含一个对象,即使是一个简单的应用,也是由几个对象合作来完成用户需要使用的功能。本节将介绍定义的Bean是如何在真实系统中配合来完成既定功能的。
依赖注入就是在对象构建完成后,为其定义依赖的过程。容器会在创建Bean的时候将这些依赖注入进去。这个过程跟我们通常编码不同,平常我们都需要在代码中去new一个对象,而这里把这个操作交给容器了,由Bean自己来控制依赖的实例化,与通常的方法是相反的,称之为控制反转(IoC)。
使用依赖注入的话,代码会变得更加清晰,也将对象和依赖进行了解耦。
1 基于构造器的依赖注入
基于构造器的依赖注入是由容器来调用一个带有多个参数的构造器,和调用静态工厂方法来构建Bean类似。下面的例子表示一个仅通过构造器进行依赖注入的类。
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg type="int" value="7500000"/>
<constructor-arg type="java.lang.String" value="42"/>
</bean>[/code]
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg name="years" value="7500000"/>
<constructor-arg name="ultimateAnswer" value="42"/>
</bean>[/code]
[b]<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/>
<bean name="not.lazy" class="com.foo.AnotherBean"/>[/code]
public abstract class CommandManager {
public Object process(Object commandState) {
Command command = createCommand();
command.setState(commandState);
return command.execute();
}
protected abstract Command createCommand();
}[/code]
一个典型的企业应用不止包含一个对象,即使是一个简单的应用,也是由几个对象合作来完成用户需要使用的功能。本节将介绍定义的Bean是如何在真实系统中配合来完成既定功能的。
依赖注入就是在对象构建完成后,为其定义依赖的过程。容器会在创建Bean的时候将这些依赖注入进去。这个过程跟我们通常编码不同,平常我们都需要在代码中去new一个对象,而这里把这个操作交给容器了,由Bean自己来控制依赖的实例化,与通常的方法是相反的,称之为控制反转(IoC)。
使用依赖注入的话,代码会变得更加清晰,也将对象和依赖进行了解耦。
1 基于构造器的依赖注入
基于构造器的依赖注入是由容器来调用一个带有多个参数的构造器,和调用静态工厂方法来构建Bean类似。下面的例子表示一个仅通过构造器进行依赖注入的类。
<beans>
<bean id="foo" class="x.y.Foo">
<constructor-arg ref="bar"/>
<constructor-arg ref="baz"/>
</bean>
<bean id="bar" class="x.y.Bar"/>
<bean id="baz" class="x.y.Baz"/>
</beans>
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg type="int" value="7500000"/>
<constructor-arg type="java.lang.String" value="42"/>
</bean>[/code]
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg name="years" value="7500000"/>
<constructor-arg name="ultimateAnswer" value="42"/>
</bean>[/code]
[b]<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/>
<bean name="not.lazy" class="com.foo.AnotherBean"/>[/code]
public abstract class CommandManager {
public Object process(Object commandState) {
Command command = createCommand();
command.setState(commandState);
return command.execute();
}
protected abstract Command createCommand();
}[/code]
相关文章推荐
- java垃圾回收机制
- 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(解读误区)
- jvm gc 配置
- javaweb基础
- java优秀文章总结
- 取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)..
- java api封装与工厂模式
- Java中的排序
- 【算法导论32-Java中如何覆写Hashcode()函数】
- java学习之路 之 基本语法-特殊的流程控制语句-练习题
- 【Java】——Json反序列化为Java对象
- Cannot forward after response has been committed
- Java自学视频整理(持续更新中...)
- Java 基础之(十一)一维数组
- HashMap的实现原理
- Java源码-简单手绘程序
- JAVA实现观察者模式
- Struts2数据传输的背后机制
- java多线程--condition条件
- Java 读取配置文件中的信息 中文乱码