当前位置: 首页 > news >正文

锦屏县城乡和建设局网站图片制作动图

锦屏县城乡和建设局网站,图片制作动图,网站开发还是安卓开发好,设计公司的企业远景在bean的初始化阶段#xff0c;bean已经被实例化及属性填充了#xff0c;此时的bean已相对成熟#xff0c;接下来的初始化阶段还会做一些额外的工作对bean做进一步处理#xff0c;主要包括以下四个方面#xff1a; 调用aware接口方法 初始化前#xff1a;调用初始化前的…        在bean的初始化阶段bean已经被实例化及属性填充了此时的bean已相对成熟接下来的初始化阶段还会做一些额外的工作对bean做进一步处理主要包括以下四个方面 调用aware接口方法 初始化前调用初始化前的后置处理器方法 初始化调用InitializingBean接口的afterPropertiesSet方法 初始化后调用初始化后的后置处理器方法 1. Bean初始化主流程 AbstractAutowireCapableBeanFactory#initializeBean 运用aware回调接口、afterPropertiesSet方法、后置处理器完成bean实例的初始化 // 运用aware回调接口、afterPropertiesSet方法、后置处理器完成bean实例的初始化 protected Object initializeBean(final String beanName, final Object bean, Nullable RootBeanDefinition mbd) {if (System.getSecurityManager() ! null) {AccessController.doPrivileged((PrivilegedActionObject) () - {invokeAwareMethods(beanName, bean);return null;}, getAccessControlContext());}else {// 1.调用aware接口的方法invokeAwareMethods(beanName, bean);}Object wrappedBean bean;if (mbd null || !mbd.isSynthetic()) {// 2.调用初始化前后置处理器wrappedBean applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);}try {// 3.调用初始化方法其实就是afterPropertiesSet方法invokeInitMethods(beanName, wrappedBean, mbd);}catch (Throwable ex) {throw new BeanCreationException((mbd ! null ? mbd.getResourceDescription() : null),beanName, Invocation of init method failed, ex);}if (mbd null || !mbd.isSynthetic()) {// 4.调用初始化后后置处理器wrappedBean applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);}return wrappedBean; } 2. Aware接口调用 如果Bean实现了BeanNameAware、BeanClassLoaderAware、BeanFactoryAware接口则会调用相应接口的方法。 BeanNameAware在Bean实例化后进行扩展操作可以获取Bean的名称BeanClassLoaderAware在Bean实例化后进行扩展操作可以获取Bean的类加载器BeanFactoryAware在Bean实例化后进行扩展操作可以获取Bean所属的BeanFactory private void invokeAwareMethods(final String beanName, final Object bean) {if (bean instanceof Aware) {if (bean instanceof BeanNameAware) {((BeanNameAware) bean).setBeanName(beanName);}if (bean instanceof BeanClassLoaderAware) {ClassLoader bcl getBeanClassLoader();if (bcl ! null) {((BeanClassLoaderAware) bean).setBeanClassLoader(bcl);}}if (bean instanceof BeanFactoryAware) {((BeanFactoryAware) bean).setBeanFactory(AbstractAutowireCapableBeanFactory.this);}} } 3. 初始化前调用初始化前的后置处理器方法 这里涉及到了Bean后置处理器BeanPostProcessor其作用如下 spring会自动从它的所有的bean定义中检测BeanPostProcessor类型的bean定义然后实例化它们再将它们应用于随后创建的每一个bean实例 在bean实例的初始化方法回调之前调用BeanPostProcessor的postProcessBeforeInitialization的方法 在bean实例的初始化方法回调之后调用BeanPostProcessor的postProcessAfterInitialization的方法 通常通过标记接口等方式填充bean的后置处理器会实现postProcessBeforeInitialization方法而将bean包装为代理的后置处理器会实现postProcessAfterInitialization方法 public interface BeanPostProcessor {Nullabledefault Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;}Nullabledefault Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {return bean;} } Override public Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName)throws BeansException {Object result existingBean;for (BeanPostProcessor processor : getBeanPostProcessors()) {Object current processor.postProcessBeforeInitialization(result, beanName);if (current null) {return result;}result current;}return result; } 例如ApplicationContextAwareProcessor后置处理器其重写了postProcessBeforeInitialization方法如果bean实现了EnvironmentAware、EmbeddedValueResolverAware、ResourceLoaderAware、ApplicationEventPublisherAware、MessageSourceAware、ApplicationContextAware接口则会调用响应接口的方法 EnvironmentAware在Bean实例化后进行扩展操作可以获取Environment实例EmbeddedValueResolverAware在Bean实例化后进行扩展操作可以获取StringValueResolver实例可用于解析占位符ResourceLoaderAware在Bean实例化后进行扩展操作可以获取ResourceLoader实例ApplicationEventPublisherAware在Bean实例化后进行扩展操作可以获取ApplicationEventPublisher实例MessageSourceAware在Bean实例化后进行扩展操作可以获取MessageSource实例ApplicationContextAware在Bean实例化后进行扩展操作可以获取ApplicationContext实例 4. 初始化调用InitializingBean接口的afterPropertiesSet方法或自定义的init方法 protected void invokeInitMethods(String beanName, final Object bean, Nullable RootBeanDefinition mbd)throws Throwable {boolean isInitializingBean (bean instanceof InitializingBean);if (isInitializingBean (mbd null || !mbd.isExternallyManagedInitMethod(afterPropertiesSet))) {if (logger.isTraceEnabled()) {logger.trace(Invoking afterPropertiesSet() on bean with name beanName );}if (System.getSecurityManager() ! null) {try {AccessController.doPrivileged((PrivilegedExceptionActionObject) () - {((InitializingBean) bean).afterPropertiesSet();return null;}, getAccessControlContext());}catch (PrivilegedActionException pae) {throw pae.getException();}}else {// 调用afterPropertiesSet方法((InitializingBean) bean).afterPropertiesSet();}}if (mbd ! null bean.getClass() ! NullBean.class) {String initMethodName mbd.getInitMethodName();if (StringUtils.hasLength(initMethodName) !(isInitializingBean afterPropertiesSet.equals(initMethodName)) !mbd.isExternallyManagedInitMethod(initMethodName)) {// 调用自定义的init方法invokeCustomInitMethod(beanName, bean, mbd);}} } 5. 初始化后调用初始化后的后置处理器方法 Override public Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName)throws BeansException {Object result existingBean;for (BeanPostProcessor processor : getBeanPostProcessors()) {Object current processor.postProcessAfterInitialization(result, beanName);if (current null) {return result;}result current;}return result; }
http://www.hkea.cn/news/14530115/

相关文章:

  • 公司备案 网站主办者名称做一个旅游网站
  • 手机网站 程序域名续费后网站打不开
  • 手机网站左右滑动效果做百度企业网站有什么好处
  • 太原模板建站福田网站设计
  • 禹州市城乡建设局网站小规模网站开发税率
  • 网站开发报告多少页合适手机网站开发公司电话
  • 网站上传服务器教程媒体平台与著作权的关系
  • 网站调研怎样做沈阳做企业网站的公司
  • 网站建设重庆最加科技wordpress显示缩略图 摘要
  • 怎么用ps做网站框架高安做网站
  • 网站建设 账务处理辽宁建设工程信息网中标结果公示几天
  • 做美食网站的特点看装修案例的网站
  • 宁都网站建设wordpress判断使用模版
  • dns 国外网站重庆建筑人才网招聘
  • 免费网站整站模板下载wordpress插件vip
  • 四川平台网站建设方案设计制作长方体形状的包装纸盒视频
  • 集团官网及站群网站建设电子商务网站推广实训报告
  • 在海外做网站 卖东西中国设计网平面设计网
  • 广州建站软件律师所网站建设
  • 广州网站营销优化qq工程软件开发
  • 百度蜘蛛抓取网站模块啥都能看的浏览器
  • 郑州网站建设网站推广家庭安全卫士论坛WordPress
  • 外国企业网站模板免费下载wordpress 增加下载功能
  • 昆明网站建设公司小程序dede做英文网站优化
  • 延庆网站建设培训人员网站建设
  • 建设网站实训报告书学习html 欣赏好的网站
  • 哈尔滨网站建设吕新松百度指数首页
  • 云南红舰工贸有限公司的网站建设门户网站简单模板
  • 网络推广建设期的网站苏州智能网站建设
  • 网站建设的重要指标帝国cms添加网站地图