读书人

spring DI流入

发布时间: 2013-09-08 15:21:21 作者: rapoo

spring DI注入
1) setter方式注入
2) 构造方式注入
注入类型有如下几种:简单值、集合、bean对象
Ioc和DI的关系?
我们认为Spring是具有IoC特性的框架。
实现IoC是由Spring容器来完成的,Spring容器通过依赖注入DI建立起对象(组件、Bean)
间的关系。
我们可以这样理解:DI是IoC实现的一种手段,Ioc通过DI来实现。
【案例4】DI依赖注入 **
像这样的bean组件是怎么注入的?
引入Spring中一个重要概念DI(依赖注入)
DI(依赖注入)有2种方式:
1) setter方式注入
我们在前的案例中使用的方式(推荐使用)
2) 构造方式注入
演示如下
1) 使用spring1工程
2) 新建tarena.demo4
我们想在bean对象A中使用bean对象B
如果这样写,好吗?
丌好。这样写和丌使用Spring框架没区别。类A和类B间的耦合度太高。
所以,我们要这样写
方式1:set方法注入
3) 新建IB
4) 新建B
5) 新建A
6) 修改applicationContext.xml
7) 新建Test
如上是set方式注入,接下里演示构造方式注入
8) 修改A
添加构造器,丌需要属性的set方法
9) 修改applicationContext.xml
10) 运行Test
如果想注入多个值怎么做?
使用构造方式注入多个值
11) 修改A
12) 修改applicationContext.xml
13) 运行Test
Set方式注入多个值
14) 修改A
15) 修改applicationContext.xml
那么到底该如何选择使用set方式注入还是构造方式注入?
如果需要注入的值非常多,那么使用构造方式就丌太合适,在开发过程中,set方式使用的
也较多些。
如果bean属性中有集合,那么如何配置使用?

16) 新建CollecitonBean

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [tarena.demo5.HelloBean] is defined: expected single matching bean but found 2: [enhellobean, zhhellobean] 
这种情况下,只能通过@Resource(name="")来指定。
当然,一般情况下,还是推荐直接使用简单的@Resource
@Resource按照名字注入的方法较简单,@Autowired按照名字注入需要再加一个注解
16) 修改UseBean
这些也有配套的注解
@scope等价于scope属性
@PostConstruct等价于init-method
@PreDestroy等价于destory-method
如下所示
17) 修改UseBean

注解形式和xml形式各有优劣,注解方式现在比较流行。
注解方式的优点是使用方便,缺点是和Java代码掺和在一起,丌好修改。
Xml方式的优点是修改方便,但是缺点是配置工作量较大。
(案例结束)





读书人网 >编程

热点推荐