Spring IOC的注解使用
在之前的项目中,我们都是通过xml文件进行bean或者某些属性的赋值,其实还有另外一种注解的方式,在企业开发中使用的很多,在bean上添加注解,可以快速的将bean注册到ioc容器。
1、使用注解的方式注册bean到IOC容器中
applicationContext.xml
1 |
|
PersonController.java
1 | package com.oi.controller; |
PersonService.java
1 | package com.oi.service; |
PersonDao.java
1 | package com.oi.dao; |
2、定义扫描包时要包含的类和不要包含的类
当定义好基础的扫描包后,在某些情况下可能要有选择性的配置是否要注册bean到IOC容器中,此时可以通过如下的方式进行配置。
applicationContext.xml
1 |
|
3、使用@AutoWired进行自动注入
使用注解的方式实现自动注入需要使用@AutoWired注解。
PersonController.java
1 | package com.oi.controller; |
PersonService.java
1 | package com.oi.service; |
PersonDao.java
1 | package com.oi.dao; |
注意:当使用AutoWired注解的时候,自动装配的时候是根据类型实现的。
1、如果只找到一个,则直接进行赋值,
2、如果没有找到,则直接抛出异常,
3、如果找到多个,那么会按照变量名作为id继续匹配,
1、匹配上直接进行装配
2、如果匹配不上则直接报异常
PersonServiceExt.java
1 | package com.oi.service; |
PersonController.java
1 | package com.oi.controller; |
还可以使用@Qualifier注解来指定id的名称,让spring不要使用变量名,当使用@Qualifier注解的时候也会有两种情况:
1、找到,则直接装配
2、找不到,就会报错
PersonController.java
1 | package com.oi.controller; |
通过上述的代码我们能够发现,使用@AutoWired肯定是能够装配上的,如果装配不上就会报错。
4、@AutoWired可以进行定义在方法上
当我们查看@AutoWired注解的源码的时候发现,此注解不仅可以使用在成员变量上,也可以使用在方法上。
PersonController.java
1 | package com.oi.controller; |
5、自动装配的注解@AutoWired,@Resource
在使用自动装配的时候,出了可以使用@AutoWired注解之外,还可以使用@Resource注解,大家需要知道这两个注解的区别。
1、@AutoWired:是spring中提供的注解,@Resource:是jdk中定义的注解,依靠的是java的标准
2、@AutoWired默认是按照类型进行装配,默认情况下要求依赖的对象必须存在,@Resource默认是按照名字进行匹配的,同时可以指定name属性。
3、@AutoWired只适合spring框架,而@Resource扩展性更好
PersonController.java
1 | package com.oi.controller; |
6、泛型依赖注入
为了讲解泛型依赖注入,首先我们需要先写一个基本的案例,按照我们之前学习的知识:
Student.java
1 | package com.oi.bean; |
Teacher.java
1 | package com.oi.bean; |
BaseDao.java
1 | package com.oi.dao; |
StudentDao.java
1 | package com.oi.dao; |
TeacherDao.java
1 | package com.oi.dao; |
StudentService.java
1 | package com.oi.service; |
TeacherService.java
1 | package com.oi.service; |
MyTest.java
1 | import com.oi.service.StudentService; |
上述代码是我们之前的可以完成的功能,但是可以思考,Service层的代码是否能够改写:
BaseService.java
1 | package com.oi.service; |
StudentService.java
1 | package com.oi.service; |
TeacherService.java
1 | package com.oi.service; |