从Controller注解切入了解spring注解原理
2020-12-13 03:00
标签:common oat 处理器 @Value sdn 怎么 配置文件 创建 那是 pring容器框架包org.springframework.stereotype下Controller注解接口源代码如下: @Target({java.lang.annotation.ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Controller { public abstract String value(); } @Target({java.lang.annotation.ElementType.Type})表是注解使用在类上; @Retention(RetentionPolicy.RUNTIME)表示注解在程序运行状态下还有效; @Component表示该类对象以默认单例模式存放在spring容器框架中; @Documented无关重要,略; 这个注解在程序运行状态下还有效。再看其他的注解@Respository,@Ser vice等,这两个注解的源代码和Controller的源代码一样,除了接口名,都共有一个value抽象函数。 这些所有的注解都会被component注解接口注解,所有“继承”了component注解接口的注解修饰用户的类会被spring中的注解处理器获取(getAnonations()),判定存在component注解后,注解处理器会在spring容器框架中根据用户类的全限定名通过java的反射机制创建这个用户类的对象,并放到spring容器框架中进行管理。 以上这些描述是我基于对注解系统的理解而描述的。 1) 创建bean实例,也就是bean的实体化,创建过程不仅仅只有java的反射机制,还结合了动态代理的方式 2) 记录创建bean的objectFactory 3) 属性注入 4) 初始化bean 5) 注册disposablebean Spring bean的生命周期: 说完bean的创建过程,那spring是如何找到这些bean的类文件的呢? 我们在spring的配置文件中,有这样一个标签节点 注意:spring容器框架额注解都会在running状态下的,所以运行时加载的文件都是已经编译后的class文件.所以使用的是asm技术读取class文件的字节码转化成MetadataReader中的AnnotationMetadataReadingVisitor结构. 标签 1)根据配置利用asm技术扫描.class文件,并将包含@Component及元注解为@Component的注解@Controller、@Service、@Repository或者还支持Java EE 6的@link javax.annotation.ManagedBean和jsr - 330的 @link javax.inject.Named,如果可用。的bean注册到beanFactory中 2)注册注解后置处理器,主要是处理属性或方法中的注解,包含: 注册@Configuration处理器ConfigurationClassPostProcessor, 注册@Autowired、@Value、@Inject处理器AutowiredAnnotationBeanPostProcessor, 注册@Required处理器RequiredAnnotationBeanPostProcessor、在支持JSR-250条件下注册javax.annotation包下注解处理器CommonAnnotationBeanPostProcessor,包括@PostConstruct、@PreDestroy、@Resource注解等、支持jpa的条件下,注册org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor处理器,处理jpa相关注解注册@EventListener处理器EventListenerMethodProcessor 注解处理器的的实例化和处理器的注册时同步的,实例化后放入到beanFactory的beanProcessors列表中去。 Spring框架的核心就是IOC,通过controller一类注解的bean的实例化过程可以大体总结spring注解的工作原理: 1)利用asm技术扫描class文件,转化成Springbean结构,把符合扫描规则的(主要是是否有相关的注解标注,例如@Component)bean注册到Spring 容器中beanFactory 2)注册处理器,包括注解处理器 4)实例化处理器(包括注解处理器),并将其注册到容器的beanPostProcessors列表中 5)创建bean的过程中,属性注入或者初始化bean时会调用对应的注解处理器进行处理。 举例注解@Autowired 。对于这个注解,您需要在xml中配置这个注解的处理器 AutowiredAnnotationBeanPostProcessor,这个处理器会扫描容器中所有的bean对象,发现bean中拥有@Autowired注解的时候会自动去找到容器中和这个注解修饰类型匹配的bean对象,并注入到对应的地方去。 那为什么AutowiredAnnotationBeanPostProcessor这个处理器对象我怎么在配置文件中没有看到设置呢? 那是因为在spring解析 从Controller注解切入了解spring注解原理 标签:common oat 处理器 @Value sdn 怎么 配置文件 创建 那是 原文地址:https://www.cnblogs.com/wjlwo2ni/p/11063807.html
bean创建的几个重要步骤:
---------------------
原文:https://blog.csdn.net/jack_wang001/article/details/78781588