依赖注入的注解的原理:
1、当启动spring容器的时候,创建两个对象
2、当spring容器解析到
<context:annotation-config></context:annotation-config>
spring容器会在spring容器管理的bean的范围内查找这些类的属性上是否加了@Resource注解
3、spring解析@Resource注解的name属性
- 如果name属性为“ ”,说明该注解根本没有写name属性,spring容器会得到该注解所在属性的名称和spring容器中的id做匹配,如果匹配成功则赋值,如果匹配不成功,则按照类型进行匹配
- 如果name属性的值不为“ ”,则按照name属性的值和spring的id做匹配,如果匹配成功则赋值,不成功则报错
spring中的@Autouired//按照类型进行匹配和@Qualifier("student")相当于Java中的@Resource
说明:
- 注解只能用于引用类型
- 注解写法比较简单,但是效率比较低
- xml写法比较复杂,但是效率比较高
spring容器的类扫描注解原理:
component:把一个类放入到spring容器中,该类就是一个compent在base-package指定的包及子包下扫描所有的类
1、启动spring容器,spring容器解析配置文件
2、当解析到
<context:component-scan base-package="..."></context:component-scan>
就会在上面指定的包及子包中扫描所有的类,看那些类上面有@Component注解
3、如果有该注解,则有如下规则
@Component
public class PersonDaoImpl(){}
<bean id=personDaoImpl" class="..."></bean>
id的值把类的第一个字母变成小写,其他字母不变
4、按照@Resource注解的规则进行赋值
@Resource=> Dao层
@Service=>Service层
@Controller=>Controller层