当前位置: 首页 > 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.yayakq.cn/news/192471/

相关文章:

  • 机械设备上海网站建设网站开发技术项目代码搜索
  • 网络营销的案例分析外包网站怎么做seo
  • 南充网站建设选略奥网络营销和传统营销的区别
  • ph域名网站wordpress模版改版
  • 手机网站开发哪家好上海市建筑工程有限公司
  • 成都 php 网站自己做的网站怎么改背景图
  • 新浪云虚拟主机做电影网站wordpress文章列表摘要
  • 如何拍做美食的视频网站郑州设计公司有哪些
  • 台州路桥做网站的公司网站免费正能量直接进入
  • 新网站的建设工作刘涛做的婴儿玩具网站
  • 泉州企业制作网站网络公司做网站
  • 网站开发中的文档网站建设付款银行写什么用途
  • 网站关键词优化方案浙江舟山城乡建设网站
  • 什么是a站WordPress 云 memcache
  • 海鲜网站开发目的在于人才网站建设的目标
  • 石景山网站开发怎样优化关键词到首页
  • 怎样建设网站首页手机软件下载网站wap模板
  • 程序员做情侣网站商业网站的规划和设计
  • 怎么查看网站备案商做网站软件war
  • 烟台网站制作公司在线咨询陕西省建设厅八大员证
  • 垫江集团网站建设常州 微网站
  • 可以做查询功能的网站flash 可以做网站吗
  • 谷歌怎么做网站推广智能营销
  • 注册域名建设网站上海营销型网站设计
  • 运城市做网站服务专业公司网站建设服务
  • 自己如何注册网站网站如何做优化
  • html5快速建站重庆网站关键词推广
  • 深圳网站关键词优化公司南通的网站建设
  • 养殖网站模版网站备案要多久时间
  • 网站建设费计入哪个二级科目贵州整站优化seo平台