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

焦作网站建设哪家权威软文推广是什么意思

焦作网站建设哪家权威,软文推广是什么意思,wordpress文章排列,公司注册资金认缴和实缴区别简介 spring在创建Bean的过程中,提供了很多个生命周期,实例化前就是比较早的一个生命周期,顾名思义就是在Bean被实例化之前的处理,这个时候还没实例化,只能拿到该Bean的Class对象,如果在这个时候直接返回一…

简介

spring在创建Bean的过程中,提供了很多个生命周期,实例化前就是比较早的一个生命周期,顾名思义就是在Bean被实例化之前的处理,这个时候还没实例化,只能拿到该Bean的Class对象,如果在这个时候直接返回一个对象,那么就不用spring给我们创建了

简单使用

实现 InstantiationAwareBeanPostProcessor 接口的 postProcessBeforeInstantiation方法

@Component
public class UserBean {public UserBean() {System.out.println("实例化UserBean");}
}@Component
public class BeforeInstantiation implements InstantiationAwareBeanPostProcessor {@Overridepublic Object postProcessBeforeInstantiation(@NotNull Class<?> beanClass, String beanName) throws BeansException {if (beanName.equals("userBean")) {return "1";}return null;}
}public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(context.getBean("userBean"));
}

输出结果 1

从上面的逻辑可以看出,如果beanName是userBean,那么直接返回一个
1,这个返回值是个object,任意类型都可以,如果直接返回有结果,那么这个结果就是该bean的结果,spring不会再给我们去实例化bean

源码分析

createBean源码

Object bean = resolveBeforeInstantiation(beanName, mbdToUse);// 如果拿到Bean直接返回,也就是不会再有后面的逻辑,后面的一些扩展点会不生效
if (bean != null) {return bean;
}

进入 resolveBeforeInstantiation

protected Object resolveBeforeInstantiation(String beanName, RootBeanDefinition mbd) {Object bean = null;if (!Boolean.FALSE.equals(mbd.beforeInstantiationResolved)) {// 有没有 InstantiationAwareBeanPostProcessors 后置处理器if (!mbd.isSynthetic() && hasInstantiationAwareBeanPostProcessors()) {Class<?> targetType = determineTargetType(beanName, mbd);if (targetType != null) {// 如果有后置处理去执行初始化前逻辑,可能获得了一个Beanbean = applyBeanPostProcessorsBeforeInstantiation(targetType, beanName);if (bean != null) {// 如果获得了Bean,由于外面是直接返回,但是Aop逻辑应该还是要有,而aop就是通过初始化后的后置处理实现的,所以需要执行bean = applyBeanPostProcessorsAfterInitialization(bean, beanName);}}}mbd.beforeInstantiationResolved = (bean != null);}return bean;
}protected Object applyBeanPostProcessorsBeforeInstantiation(Class<?> beanClass, String beanName) {// 遍历执行postProcessBeforeInstantiation方法,可能可以直接获得到Beanfor (InstantiationAwareBeanPostProcessor bp : getBeanPostProcessorCache().instantiationAware) {Object result = bp.postProcessBeforeInstantiation(beanClass, beanName);if (result != null) {return result;}}return null;
}public Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) throws BeansException {Object result = existingBean;// 遍历执行初始化后的逻辑postProcessAfterInitializationfor (BeanPostProcessor processor : getBeanPostProcessors()) {Object current = processor.postProcessAfterInitialization(result, beanName);if (current == null) {return result;}result = current;}return result;
}

从上面的源码逻辑得知,每个bean都会进行实例化前的操作,通过找出所有的InstantiationAwareBeanPostProcessor执行postProcessAfterInitialization方法进行扩展。

以上就是实例化前的扩展点。


欢迎关注,学习不迷路!

http://www.shuangfujiaoyu.com/news/26792.html

相关文章:

  • 企业黄页哪个网站好网络推广是做什么工作的
  • 苏州企业网站建设网站快速被百度收录
  • 怎么做论坛网站bt磁力在线种子搜索神器下载
  • js特效演示网站百度平台客服联系方式
  • 织梦dedecms医院类网站在线预约挂号插件西安百度推广开户运营
  • 网站主题模板制作惠州seo关键字优化
  • 网站首页设计特点有哪些上海百度推广方案
  • 网站流量超了my63777免费域名查询
  • hui怎么做网站网络营销职业规划300字
  • 免费b站推广网站不用下载惠州seo收费
  • 网站开发与维护难吗海外游戏推广平台
  • dreamweaver网站制作教程温州seo按天扣费
  • 外贸网站索引页多外贸出口平台网站
  • 鞍山吧最新消息西安区seo搜索排名优化
  • 开彩票网站做私庄上海app网络推广公司
  • 大连网页制作培训学校青岛seo服务
  • 昆明哪个公司做网站建设最好只要做好关键词优化
  • 腾讯云注册域名后怎么做网站软文范例大全500
  • 如何通过轻淘客做网站成人就业技术培训机构
  • 网站优化排名软件网百度霸屏推广多少钱一个月
  • 如何做网站页面网络营销专业的就业方向
  • 太仓网站建设企业网站站长素材网
  • 无忧seo博客广州网站优化软件
  • 怎样做咨询网站seo人才招聘
  • 做网站找哪个软件百度快照是怎么做上去的
  • 惠州网站建设培训百度竞价点击神器下载安装
  • 上海网站开发服务商网络市场调研
  • 有没有做高仿手表的网站搜索排名优化公司
  • 权威的广州h5网站品牌seo是什么意思
  • 郑州营销型网站建设公司网站推广方式