在JavaWeb开发的三层架构中,业务层接口对持久层方法进行封装,进一步的传递给web层使用,而在业务层对持久层的封装时,Spring容器的依赖注入发挥了很大作用,依赖注入大致分以下几类:
- 对象的注入:
我们知道,web层在调用业务层的方法时,无需关心业务层是怎么对持久层进行封装的,只需知道业务层的方法能完成什么业务,因此业务层在封装持久层对象时,可以用Spring的Bean容器进行依赖注入,来完成解耦
applicationContext.xml
:
如上图,在Spring配置文件中,bean
标签可以理解为一个类,也可以理解为一个对象,scpoe
属性默认为singleton
,表示这个类具有唯一的对象,在外部或者其他bean
中引用其id时都只能获取到同一个对象,而如果scope
为prototype
时,则在外部每次调用getBean()
方法时都会生成一个新的对象,每个bean
都有其唯一标识id
,在bean
的子标签中,可以有许多的property
标签,该例子中前一个bean
代表DAO层的类对象,后一个bean
代表业务层的对象,其属性property
的name为业务层中注入的DAO层对象,在这之前,需要在业务层中声明一个DAO对象并设置其setter
方法
而之后的ref属性则引用了上面DAO对象的id
,这样就实现了在Spring容器中自动将DAO对象注入到业务层的对象中,实现web层与DAO层的解耦
- 注入数据
上面以JavaWeb的三层架构为例,介绍了Spring容器的Bean实现对象的依赖注入 ,下面介绍数据的注入,和上面对象一样,想要注入某个数据,只需要将ref
属性改成value
即可,而其name也就是该数据的名称 - 下面我们类比以下以上的方法,如果想要注入一个数组怎么办呢,比如有一个
List<String>
数组,我们只需要在property
标签的子标签中使用list
标签,在其内部使用多个value
标签即可 - 如果想要实现map注入,则在
map
标签下使用多个entry
标签 ,以此类推
简单来说,Spring的Bean容器,顾名思义就是储存各个类对象的地方,每个对象以bean
标签的方式呈现,这个对象需要配置哪些属性,以及哪些数据,甚至哪些其他对象,都由配置文件决定,而在容器的外部程序中想要访问容器内的对象资源,则需要用getBean()
方法:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService service = (UserService) context.getBean("userService");