Spring框架 IOC控制反转
对象之间的依赖由容器建立,避免对象之间依赖由对象自身建立。可以用减少代码之间的耦合度。其中最常见的方式叫做依赖注入。
当A类中用到了B类的对象b,在没有IOC时需要在A的代码中new一个B的对象。
采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。
依赖注入:
- 基本元素注入
- 列表元素注入
- 对象依赖注入
基本元素注入:
@Value("值")
property:name=“属性名” value=“值”
<bean id="student" class="entity.Student">
<property name="age" value="21"/>
</bean>
列表元素注入:
list
mysql
j2ee
set
mysql
j2ee
map
对象依赖注入:
- set方法注入 注解:set方法上
xml配置
property元素表示用set注入方式,spring调用B类的setA()方法注入
<bean id="b" class="entity.B">
<property name="a" ref = "a1">
</bean>
注解方式:
@Resource(name="a1")
public void setA( A a) {
this.a = a;
}
- 构造器方法注入 注解:构造器方法上
xml配置
index为第几个参数(下标从0开始)ref指定注入对象的setA()方法注入
<bean id="b" class="entity.B">
<constructor-arg index="0" ref="a1">
</bean>
注解方式:
构造器上
- 自动注入 @Autowired
byName xml配置
Spring会根据B中的属性成员的名字自动调用set方法注入容器中Id等于属性名的对象(找不到注入null,不可能找到多个)
<bean id="b" class="entity.B"
autowire="byName"
</bean>
byType xml配置
Spring会根据B中的属性成员的类型自动调用set方法注入容器中类型相等的对象(找不到注入null,找到多个报错)
<bean id="b" class="entity.B"
autowire="byType"
</bean>
byType 注解注入
@Autowired为Spring提供的注解,只按照byType注入。
可以放在属性上 或者set方法上
@Autowired
属性反射注入 属性上 @Resource(name=“id”)
下面两种@Resource只要使用一种即可public class ServiceImpl {
@Resource(name="userDao")
private UserDao userDao;
@Resource(name="userDao")
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
IOC部分知识图
还没有评论,来说两句吧...