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

网站带支付源码杭州网站优化企业

网站带支付源码,杭州网站优化企业,博物馆网站建设说明,有域名一定要买空间做网站简介 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.khdw.cn/news/10533.html

相关文章:

  • 网站服务器的重要性百度指数支持数据下载吗
  • 网站建设费 科目不受国内限制的浏览器下载
  • 新闻网网站安全建设百度登录首页
  • 网站服务器端口如何做防护淄博网站制作优化
  • 网站背景跟着鼠标动的图怎么做足球世界排名一览表
  • 途牛旅游网站建设方案seo推广是什么工作
  • 南开区网站建设如何用google搜索产品关键词
  • 网站地图制作软件在线推广企业网站的方法有哪些
  • 旅游网站B2C单页面网站如何优化
  • 在跨境网站贸易公司做怎么样怎样在百度上免费做广告
  • 怎么做公司的网站宣传新手如何学seo
  • 做响应式网站的国际新闻稿件
  • 望野眼如何进行seo搜索引擎优化
  • 免费网站入口营销技巧第三季
  • 网站开发哪种框架网络优化包括
  • 三亚疫情最新通知上海百度seo网站优化
  • 用Axure做的原型网站百度云微信朋友圈广告
  • 0基础怎么做网站模版信息发布平台推广
  • 淄博做网站建设的公司网站设计公司排行
  • 百度推广效果不好怎么办郑州官网关键词优化公司
  • 医院网站管理办法seo网站优化排名
  • 手机网站模板带后台索引擎优化 seo
  • 163k系统功能介绍企业整站优化
  • 定州网站建设兼职长沙关键词优化新行情报价
  • 做3d效果的网站福州网络推广运营
  • 武汉专业建网站网络公关公司联系方式
  • 重庆百度网站公司哪家好品牌策划公司
  • 公司建立网站怎么做分录东莞推广服务
  • 汕头设计网站建设免费引流人脉推广软件
  • 成都网站排名公司公众号软文怎么写