一.标记与扫描
1.标记
- 注解本身只是做一个标记,然后框架检测到注解的位置,针对注解标记的功能执行具体操作
即xml和注解告诉框架java代码如何执行
2.扫描
- 即spring框架需要指导程序员在哪些地方标记了注解,需要通过扫描的方式来进行检测。根据注解进行后续的操作。
二.注解的使用
1.注解的使用框架

2.注解的标注
- 四个注解的意义一样,其他三个注解只是@Component注解的三个别名,目的是为了让开发人员更好的辨识组件的作用
3.扫描
①扫描类型
<context:component-scan base-package="com.atguigu">
context:component-scan>
- 指定包下扫描并且排除某些类(spring负责其他组件,springmvc负责控制层)
<context:component-scan base-package="com.atguigu">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
context:component-scan>
<context:component-scan base-package="com.atguigu" use-default-filters="false">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
context:component-scan>
三.注解实现IOC的原理
1.bean的id属性和class属性
①id属性
- 默认id:类名首字母小写就是bean的id。例如:UserController类对应的bean的id就是userController。
- 自定义id:自定义bean的id,可通过标识组件的注解的value属性设置自定义的bean的id
@Service(“userService”)//默认为userServiceImpl public class UserServiceImpl implements
UserService {}
②class属性
2.基于注解的自动装配
①@Autowired注解
- 成员变量: 在成员变量上直接标记@Autowired注解即可完成自动装配,不需要提供setXxx()方法。以后我们在项目中的正式用法就是这样。
- 构造器和set方法之前也可以加
②自动装配的实现细节
- 根据组件类型到IOC容器中去匹配(byType)
- 如果根据类型没有查找到
- 设置@Autowired为没有不装配,出现空指针异常
- 如果根据类型查找到多个bean
- 如果使用@Qualifier注解,则根据注解标识的id寻找bean,如果找到装配成功,没找到装配失败
- 如果未使用@Qualifier注解,根据@Autowired标记位置成员变量的变量名作为bean的id进行匹配,能够找到装配成功,没找到装配失败