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

中国建设银行太原招聘信息网站手机网站整站模板

中国建设银行太原招聘信息网站,手机网站整站模板,企业管理网站模板,网页设计图片垂直对齐方式为顶端接AnnotationConfigApplicationContext流程看实例化的beanPostProcessor-CSDN博客#xff0c;以具体实例看bean生命周期的一些执行阶段 bean生命周期流程 生命周期扩展处理说明实例化:createBeanInstance 构造方法#xff0c; 如Autowired的构造方法注入依赖bean 如UserSer…接AnnotationConfigApplicationContext流程看实例化的beanPostProcessor-CSDN博客以具体实例看bean生命周期的一些执行阶段 bean生命周期流程 生命周期扩展处理说明实例化:createBeanInstance 构造方法 如Autowired的构造方法注入依赖bean 如UserService构造方法注入AppDAO Autowired public UserService(AppDAO appDAO) {System.out.println(Autowired appDAO: appDAO);this.appDAO appDAO; } 属性设置populateBean 如setter方法注入的依赖 如Autoware的filed注入 如UserService中注入UserDAO Resource(name u) public void setUserDAO(UserDAO userDAO) {System.out.println(setUserDAO: userDAO);this.userDAO userDAO; } 初始化initializeBean 1. BeanPostProcessor#postProcessBeforeInitialization 2. PostConstruct 3. InitializingBean#afterPropertiesSet initMethod 4. BeanPostProcessor#postProcessAfterInitialization 上一步骤属性设置完后初始化方法前后都可以扩展。 例如BeanPostProcessor#postProcessBeforeInitialization直接改变了set注入的appDAO对象 Component public class ServiceBeanPostProcessor implements BeanPostProcessor {Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {// Bean 初始化前的逻辑if (beanName.equals(userService)) {UserService userService (UserService)bean;AppDAO appDAO new AppDAOImpl2();userService.setAppDAO(appDAO);System.out.println(postProcessBeforeInitialization: : bean);}return bean;}销毁 1. PreDestroy 2. DisposableBean#destroy destroyMethod 附org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean /*** Actually create the specified bean. Pre-creation processing has already happened* at this point, e.g. checking {code postProcessBeforeInstantiation} callbacks.* pDifferentiates between default bean instantiation, use of a* factory method, and autowiring a constructor.* param beanName the name of the bean* param mbd the merged bean definition for the bean* param args explicit arguments to use for constructor or factory method invocation* return a new instance of the bean* throws BeanCreationException if the bean could not be created* see #instantiateBean* see #instantiateUsingFactoryMethod* see #autowireConstructor*/protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Nullable Object[] args)throws BeanCreationException {// Instantiate the bean.BeanWrapper instanceWrapper null;if (mbd.isSingleton()) {instanceWrapper this.factoryBeanInstanceCache.remove(beanName);}if (instanceWrapper null) {instanceWrapper createBeanInstance(beanName, mbd, args);}final Object bean instanceWrapper.getWrappedInstance();Class? beanType instanceWrapper.getWrappedClass();if (beanType ! NullBean.class) {mbd.resolvedTargetType beanType;}// Allow post-processors to modify the merged bean definition.synchronized (mbd.postProcessingLock) {if (!mbd.postProcessed) {try {applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName);}catch (Throwable ex) {throw new BeanCreationException(mbd.getResourceDescription(), beanName,Post-processing of merged bean definition failed, ex);}mbd.postProcessed true;}}// Eagerly cache singletons to be able to resolve circular references// even when triggered by lifecycle interfaces like BeanFactoryAware.boolean earlySingletonExposure (mbd.isSingleton() this.allowCircularReferences isSingletonCurrentlyInCreation(beanName));if (earlySingletonExposure) {if (logger.isTraceEnabled()) {logger.trace(Eagerly caching bean beanName to allow for resolving potential circular references);}addSingletonFactory(beanName, () - getEarlyBeanReference(beanName, mbd, bean));}// Initialize the bean instance.Object exposedObject bean;try {populateBean(beanName, mbd, instanceWrapper);exposedObject initializeBean(beanName, exposedObject, mbd);}catch (Throwable ex) {if (ex instanceof BeanCreationException beanName.equals(((BeanCreationException) ex).getBeanName())) {throw (BeanCreationException) ex;}else {throw new BeanCreationException(mbd.getResourceDescription(), beanName, Initialization of bean failed, ex);}}if (earlySingletonExposure) {Object earlySingletonReference getSingleton(beanName, false);if (earlySingletonReference ! null) {if (exposedObject bean) {exposedObject earlySingletonReference;}else if (!this.allowRawInjectionDespiteWrapping hasDependentBean(beanName)) {String[] dependentBeans getDependentBeans(beanName);SetString actualDependentBeans new LinkedHashSet(dependentBeans.length);for (String dependentBean : dependentBeans) {if (!removeSingletonIfCreatedForTypeCheckOnly(dependentBean)) {actualDependentBeans.add(dependentBean);}}if (!actualDependentBeans.isEmpty()) {throw new BeanCurrentlyInCreationException(beanName,Bean with name beanName has been injected into other beans [ StringUtils.collectionToCommaDelimitedString(actualDependentBeans) ] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using getBeanNamesOfType with the allowEagerInit flag turned off, for example.);}}}}// Register bean as disposable.try {registerDisposableBeanIfNecessary(beanName, bean, mbd);}catch (BeanDefinitionValidationException ex) {throw new BeanCreationException(mbd.getResourceDescription(), beanName, Invalid destruction signature, ex);}return exposedObject;} 扩展执行 接上文AnnotationConfigApplicationContext流程看实例化的beanPostProcessor-CSDN博客来看这些BeanPostProcessor如何起作用 测试bean定义类如下 Service(userService) public class UserService implements InitializingBean, DisposableBean {private String userServiceName;private UserDAO userDAO;private AppDAO appDAO;/*** field 注入*/Autowiredprivate CommonService commonService;public UserService() {System.out.println(constructor);}/*** 类似于 InitializingBean 的 afterPropertiesSet() 方法*/PostConstructpublic void init() {System.out.println(PostConstruct userService);System.out.println(userDAO is not null: (userDAO ! null));System.out.println(appDAO is not null: (appDAO ! null));userServiceName selfUserService;}/*** setter注入* param userDAO*/Resource(name u)public void setUserDAO(UserDAO userDAO) {System.out.println(setUserDAO: userDAO);this.userDAO userDAO;}/*** 构造器注入* param appDAO*/Autowiredpublic UserService(AppDAO appDAO) {System.out.println(Autowired appDAO: appDAO);this.appDAO appDAO;}public void add(User user) {userDAO.save(user);}public UserDAO getUserDAO() {return userDAO;}/*** 类似于 DisposableBean 的 destroy() 方法*/PreDestroypublic void preDestroy() {System.out.println(preDestroy);}Overridepublic void afterPropertiesSet() throws Exception {System.out.println(afterPropertiesSet userService);}Overridepublic void destroy() throws Exception {System.out.println(destroy userService);}public void setUserServiceName(String userServiceName) {this.userServiceName userServiceName;}public void setAppDAO(AppDAO appDAO) {this.appDAO appDAO;}Overridepublic String toString() {return UserService{ userServiceName userServiceName \ , userDAO userDAO , appDAO appDAO , commonService commonService };} }InstantiationAwareBeanPostProcessorsSmartInstantiationAwareBeanPostProcessor 推断构造函数最后是AutowiredAnnotationBeanPostProcessor完成构造函数的推断 最后判断有Autowired的构造函数 完成实例化过程 InstantiationAwareBeanPostProcessorCommonAnnotationBeanPostProcessor populate阶段CommonAnnotationBeanPostProcessor完成setter注入 /*** setter注入* param userDAO*/ Resource(name u) public void setUserDAO(UserDAO userDAO) {System.out.println(setUserDAO: userDAO);this.userDAO userDAO; } org.springframework.context.annotation.CommonAnnotationBeanPostProcessor#postProcessProperties Overridepublic PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName) {InjectionMetadata metadata findResourceMetadata(beanName, bean.getClass(), pvs);try {metadata.inject(bean, beanName, pvs);}catch (Throwable ex) {throw new BeanCreationException(beanName, Injection of resource dependencies failed, ex);}return pvs;} InstantiationAwareBeanPostProcessorAutowiredAnnotationBeanPostProcessor populate阶段AutowiredAnnotationBeanPostProcessor完成Autorwired的filed的注入具体可以再次阅读Spring5.1.3 Autorwired注解原理重新回顾-CSDN博客 BeanPostProcessor#postProcessBeforeInitialization initializeBean阶段会执行BeanPostProcessor的postProcessBeforeInitialization方法执行自定义的BeanPostProcessor 执行CommonAnnotationBeanPostProcessor解析PostConstruct注解 PostConstruct public void init() {System.out.println(PostConstruct userService);System.out.println(userDAO is not null: (userDAO ! null));System.out.println(appDAO is not null: (appDAO ! null));userServiceName selfUserService; } 执行InitializingBean的afterPropertiesSet方法 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeInitMethods 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 {((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)) {invokeCustomInitMethod(beanName, bean, mbd);}}} BeanPostProcessor#postProcessAfterInitialization InitializingBean最后阶段会执行BeanPostProcessor的postProcessAfterInitialization方法 本例 Component public class ServiceBeanPostProcessor implements BeanPostProcessor {Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {// Bean 初始化前的逻辑if (beanName.equals(userService)) {UserService userService (UserService)bean;AppDAO appDAO new AppDAOImpl2();userService.setAppDAO(appDAO);System.out.println(postProcessBeforeInitialization: : bean);}return bean;}Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {// Bean 初始化后的逻辑if (beanName.equals(userService)) {System.out.println(postProcessAfterInitialization: : bean);}return bean;} }
http://www.dnsts.com.cn/news/156472.html

相关文章:

  • vue做网站的好处是什么正规的邯郸网站建设
  • 国外购物网站哪个最好建设厅网站生成案卷生成不了
  • seo网站内部优化外包开发app需要多少钱
  • 前端网站页面模板wordpress后台html
  • 仿58网站怎么做企业年金辞职了就白交了吗
  • 威海建设集团网站wordpress控制
  • 备案停止网站做网站用属于前端
  • 织梦cms怎么搭建网站怎样添加音乐到wordpress
  • 网站访问慢原因网站建设制作找哪家公司
  • 涞水网站建设广州代注册公司哪家好
  • 营销型网站建设 案例wordpress拍卖插件中文
  • 南京seo网站管理电商网站开发面试题
  • 免费下载的网站网站做导航设计的作用是什么意思
  • 公司注册网站入口零售app开发公司
  • 有域名如何做网站网站左侧固定代码
  • 实搜网站建设上海网站建设公司地
  • wordpress网站更改不见服务器网站怎么用
  • c 能用来做网站吗网站建设有什么意义
  • 企业网站有哪些博达网站建设教程
  • 艺术网站源码济南市建设招标中心网站
  • 网站加手机建设png图标店铺logo设计免费
  • 网站源码上传到哪个文件夹游戏创作平台
  • 建立门户网站的意义html5 php 网站源码
  • 打开网站出现directory室内装饰设计师职业标准
  • 玩客云做网站网站seo优化技能
  • 八爪鱼网站建设wordpress 网页宽度
  • 网站开发的源码一个网站的建设需要什么
  • 网站合作推广方案柳州网站建设柳州
  • 工商企业网站dplayer wordpress
  • 做情趣网站需要什么资质网页 开发