Controller类使用继承@Component注解的方法,将其以单例的形式放入spring容器,如果仔细看的话会发现每个注解里面都有一个默认的value()方法,它的作用是为当前的注解声明一个名字,一般默认为类名,然后spring会通过配置文件中的<context:component-scan>
的配置,进行如下操作:
-
使用asm字节码技术扫描.class文件,并将包含@Component及元注解为@Component的注解@Controller、@Service、@Repository或者其他自定义的的bean注册到beanFactory中,
-
然后spring在注册处理器
-
实例化处理器,然后将其放到beanPostFactory中,然后我们就可以在类中进行使用了。
-
创建bean时,会自动调用相应的处理器进行处理。
举例注解@Autowired 。对于这个注解,您需要在xml中配置这个注解的处理器
AutowiredAnnotationBeanPostProcessor
,这个处理器会扫描容器中所有的bean对象,发现bean中拥有@Autowired注解的时候,会自动去找到容器中和这个注解修饰类型匹配的bean对象,并注入到对应的地方去。
- 那为什么
AutowiredAnnotationBeanPostProcessor
这个处理器对象我怎么在配置文件中没有看到设置呢?
那是因为在spring解析<context:component>
标签的时候默认这个注解被隐示配置了,还有其他的注解处理器,如CommonAnnoationBeanPostProcessor
。