引用自:http://blog.csdn.net/javazejian/article/details/54561302 ,专业
《Spring入门经典》这本书无论对于初学者或者有经验的工程师还是很值一看的
基本思想
IOC容器之前都是程序员手动的进行对象的创建和管理,如:
Class1 bean = new Class1();
所谓注入,就是这个操作交给IOC完成了,其实仔细想想这个操作可以分解为两大部分:
- 创建对象实例:new Class1()
- 赋值绑定:bean = new Class1()
同理,IOC容器的使用也可以理解为2大方面:
- 标记哪些Bean需要被IOC容器管理,即可被IOC容器识别初始化,这个步骤我们简称“new”
- 依赖绑定,即将加载的各个Bean赋值在哪些对象引用上,这个步骤我们简称“=”
new
有两种形式都可将Bean的生命交给了IOC容器来new:
- xml(定义需要自动加载初始化的Bean、以及依赖关系)
- java注解(component-scan标签默认情况下自动扫描指定路径下的包(含所有子包),将带有@Component、@Repository、@Service、@Controller标签的类自动注册到spring容器。)
=
有两种形式都可将Bean的赋值绑定交给了IOC容器来=:
- xml(定义依赖关系)
- Set方法:property
- 构造函数:constructor-arg
- 静态工厂方法:
<bean id="car6" class="com.baobaotao.ditype.CarFactory" factory-method="createCar"/>
- 实例工厂方法:
<bean id="carFactory" class="com.baobaotao.ditype.CarFactory" />
<bean id="car5" factory-bean="carFactory" factory-method="createHongQiCar"/>
- java注解
- @Autowired注解(与@Qualifier指定注入Bean的名称,可实现多态),可以放到属性上、构造函数上、Set方法上。默认按类型匹配注入Bean
- @Resource(name="xxx") :一般制定名称,按名称匹配注入Bean
- @Inject注:按类型匹配注入的Bean的,只不过它没有required属性
可见不管是@Resource还是@Inject注解,其功能都没有@Autowired丰富,因此除非必须,大可不必在乎这两个注解。
网友评论