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

用frontpage制作网页教程南京seo外包

用frontpage制作网页教程,南京seo外包,网站建设谈单技巧,张家口市网站建设简介 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.15wanjia.com/news/28088.html

相关文章:

  • 青岛做外贸网站的公司外贸展示型网站建设公司
  • 厦门做模板网站的公司广州seo优化排名推广
  • 车机油哪个网站做的好在线crm系统
  • 怎样在网站上做免费的网业百度seo优化服务
  • 网站开发外包价格北京官网seo收费
  • zblog做的商城网站腾讯网网站网址
  • 慈溪网站制作专业黑帽seo
  • dedecms手机网站百度人工在线客服
  • VPS做镜像网站郑州官网网站推广优化公司
  • 网站子页面怎么做秦皇岛seo排名
  • 网站外链推广平台东莞产品网络推广
  • 黑群晖wordpress建站百度一下手机版首页
  • 深圳网站建设外包公司怎么提高关键词搜索权重
  • 3g免费网站制作网站推广计划书范文500字
  • 双峰做网站网络营销策略都有哪些
  • 珠海seo海网站建设360站长
  • 郴州做网站ku0735百度账号注册中心
  • wordpress插件验证论坛如何做seo
  • 达州市做网站seo搜索引擎优化排名哪家更专业
  • sharepoint做网站百度的电话人工客服电话
  • 佛山做网站有哪几家baike seotl
  • 沈阳网站优化建设青岛网站制作设计
  • 免费做自我介绍网站百度seo是什么意思呢
  • 哪些网站用户体验好友链交易网
  • 国内做网站哪家好关键词智能调词工具
  • 大学生怎么做网站支付模块游戏推广话术
  • 怎样弄免费网站seo的排名机制
  • 长沙 外贸网站建设公司价格女装标题优化关键词
  • 做行政关注什么类型的网站徐州关键词优化排名
  • 深圳vi设计公司排名排名优化哪家好