spring注解-spring一些核心类的作用、用法
一、扩展原理
1.BeanPostProcessor: bean后置处理器,bean创建对象前后进行拦截工作,比如创建bean的代理并返回
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。2.BeanFactoryPostProcessor: beanFactory的后置处理器,在beanFactory标准初始化之后,可以修改
beanFactory的内容,比如注册一个bean定义
3.BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor 它定义了一个方法:
postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException,可以用来
注册bean定义。
注:3先于2调用
二、ApplicationListener
1.设计模式:观察者模式 发布中心:spring容器 观察者:监听器
应用程序可以定义观察者,作为bean注册到容器中:实现ApplicationListener<ApplicationEvent>接口, 实现接口中的方法(收听功能):onApplicationEvent(ApplicationEvent arg0)
2.容器发布事件:ctx.publishEvent(new ApplicationEvent(""){})
3.如何做到每发布一个事件,监听器就作出响应:
三、spring容器事件机制原理:
1.容器刷新事件发布到监听器处理事件:
refresh() ——>finishRefresh()——>publishEvent(new ContextRefreshedEvent(this))——>
getApplicationEventMulticaster().multicastEvent(applicationEvent, eventType)
multicastEvent(applicationEvent, eventType)执行流程:
1. 遍历监听者:getApplicationListeners(event, type),然后遍历,依次调用invokeListener(...).
invokeListener(...)——>listener.onApplicationEvent(event) 完了
2.multicastEvent多播事件就是把消息发给所有监听者,遍历监听者,调用它们的收听接口
每个监听者都有一个接口接受发布中心推送的消息,相当于信箱。
2.容器何时注册ApplicationEventMulticaster:
refresh()——>initApplicationEventMulticaster():
if (beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)),就创建
bf.getBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME,ApplicationEventMulticaster.class)
else
new SimpleApplicationEventMulticaster(beanFactory)
完。。。
3.监听者作为组件注册
