当前位置: 首页 > 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.sczhlp.com/news/147623/

相关文章:

  • 电脑怎样做轰炸网站做网站满屏的照片尺寸是多少
  • 全栈网站开发流行框架广州网站ui设计
  • 谷歌 SEO 新词 xx animate 等实操教程
  • 完整教程:【读书笔记】架构整洁之道 P6 实现细节
  • Print Conductor打印软件安装教程!一款非常好用的批量打印软件!支持PDF、Word、Excel、图片等
  • 可信网站是否必须做中国人去菲律宾做网站赌钱会抓吗
  • 江苏网站seo优化asp网站制作
  • 一条龙建站wordpress idown主题
  • 做擦边球网站会不会违法呢ppt模板免费下载网站不用登录
  • 什么是网站推广优化营销型网站建设文章
  • 星锐网站建设wordpress改模板教程
  • 网站域名备案地址网站logo一般做多大
  • 网站怎么做组织图猪八戒网站是做啥的
  • 房地产做网站廊坊做网站费用
  • 面向对象的设计原则
  • 郴州网站建设解决方案抚顺网站建设7113
  • 套餐型网站建设合同网站中信息更新怎么做的
  • 新一代 网站备案什么网站做一件代发
  • 百度推广是给做网站吗wampserver装wordpress
  • 襄城县城乡建设管理局网站口碑好的常州网站优化
  • 哪个公司制作企业网站营业执照官网申请入口
  • 网站内外链怎么做效果好住房和城乡建设查询平台
  • 宣传 网站建设方案模板ai的优点和缺点
  • 用prestashop做网站服务器租用一天
  • 佛山网站建设哪里有常州seo招聘
  • 反电动势法控制BLDC电机的原理图分析
  • 大连h5建站模板在南海建设工程交易中心网站
  • 网站制作 知乎资阳网站建设
  • 防止服务器上的网站被进攻网站定向推送怎么做
  • 2m带宽可以做音乐网站深圳网站设计制作元