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

青岛做网站好的公司济南seo整站优化厂家

青岛做网站好的公司,济南seo整站优化厂家,网站服务器防护,wordpress手机验证免插件文章目录 简介源码分析示例代码示例一:扩展点的执行顺序运行示例一 示例二:获取配置文件值配置文件application.properties内容定义工具类ConfigUtilcontroller测试调用运行示例二 示例三:实现ResourceLoaderAware读取文件ExtendResourceLoad…

文章目录

    • 简介
    • 源码分析
    • 示例代码
      • 示例一:扩展点的执行顺序
        • 运行示例一
      • 示例二:获取配置文件值
        • 配置文件application.properties内容
        • 定义工具类ConfigUtil
        • controller测试调用
        • 运行示例二
      • 示例三:实现ResourceLoaderAware读取文件
        • ExtendResourceLoaderAware 文件内容
        • token.json 文件
        • controller测试代码
        • 运行示例三

简介

spring容器中Bean的生命周期内所有可扩展的点的调用顺序
扩展接口 实现接口
ApplicationContextlnitializer initialize
AbstractApplicationContext refreshe
BeanDefinitionRegistryPostProcessor postProcessBeanDefinitionRegistry
BeanDefinitionRegistryPostProcessor postProcessBeanFactory
BeanFactoryPostProcessor postProcessBeanFactory
instantiationAwareBeanPostProcessor postProcessBeforelnstantiation
SmartlnstantiationAwareBeanPostProcessor determineCandidateConstructors
MergedBeanDefinitionPostProcessor postProcessMergedBeanDefinition
InstantiationAwareBeanPostProcessor postProcessAfterlnstantiation
SmartInstantiationAwareBeanPostProcessor getEarlyBeanReference
BeanNameAware setBeanName
BeanFactoryAware postProcessPropertyValues
ApplicationContextAwareProcessor invokeAwarelnterfaces
InstantiationAwareBeanPostProcessor postProcessBeforelnstantiation
@PostConstruct
InitializingBean afterPropertiesSet
FactoryBean getobject
SmartlnitializingSingleton afterSingletonslnstantiated
CommandLineRunner run
DisposableBeandestroy
今天要介绍的是ApplicationContextAwareProcessor ,ApplicationContextAwareProcessor 本身是没有扩展点的,但其内部却有7个扩展点可供实现 ,分别为
  • EnvironmentAware
  • EmbeddedValueResolverAware
  • ResourceLoaderAware
  • ApplicationEventPublisherAware
  • MessageSourceAware
  • ApplicationStartupAware
  • ApplicationContextAware

这些内部扩展点触发的时机在bean实例化之后,初始化之前。

1、EnvironmentAware:凡注册到Spring容器内的bean,实现了EnvironmentAware接口重写setEnvironment方法后,在工程启动时可以获得application.properties的配置文件配置的属性值。
2、EmbeddedValueResolverAware:用于获取StringValueResolver的一个扩展类, StringValueResolver用于获取基于String类型的properties的变量
3、ResourceLoaderAware:用于获取ResourceLoader的一个扩展类,ResourceLoader可以用于获取classpath内所有的资源对象,可以扩展此类来拿到ResourceLoader对象。
4、ApplicationEventPublisherAware:用于获取ApplicationEventPublisher的一个扩展类,ApplicationEventPublisher可以用来发布事件,结合ApplicationListener来共同使用
5、MessageSourceAware:用于获取MessageSource的一个扩展类,MessageSource主要用来做国际化
6、ApplicationStartupAware:要开始收集定制的StartupStep,组件可以实现ApplicationStartupAware接口直接获得ApplicationStartup实例或者在注入点请求ApplicationStartup类型。
7、ApplicationContextAware:可以用来获取ApplicationContext的一个扩展类,也就是spring上下文管理器,可以手动的获取任何在spring上下文注册的bean

源码分析

从下列源码的invokeAwareInterfaces方法可知,ApplicationContextAwareProcessor关联了大部分Spring内置Aware接口,它们的执行顺序如
下源码码所示从上到下,最开始是EnvironmentAware,最后是ApplicationContextAware

package org.springframework.context.support;class ApplicationContextAwareProcessor implements BeanPostProcessor {private final ConfigurableApplicationContext applicationContext;private final StringValueResolver embeddedValueResolver;/*** Create a new ApplicationContextAwareProcessor for the given context.*/public ApplicationContextAwareProcessor(ConfigurableApplicationContext applicationContext) {this.applicationContext = applicationContext;this.embeddedValueResolver = new EmbeddedValueResolver(applicationContext.getBeanFactory());}@Override@Nullablepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {if (!(bean instanceof EnvironmentAware || bean instanceof EmbeddedValueResolverAware ||bean instanceof ResourceLoaderAware || bean instanceof ApplicationEventPublisherAware ||bean instanceof MessageSourceAware || bean instanceof ApplicationContextAware ||bean instanceof ApplicationStartupAware)) {return bean;}AccessControlContext acc = null;if (System.getSecurityManager() != null) {acc = this.applicationContext.getBeanFactory().getAccessControlContext();}if (acc != null) {AccessController.doPrivileged((PrivilegedAction<Object>) () -> {invokeAwareInterfaces(bean);return null;}, acc);}else {invokeAwareInterfaces(bean);}return bean;}private void invokeAwareInterfaces(Object bean) {if (bean instanceof EnvironmentAware) {((EnvironmentAware) bean).setEnvironment(this.applicationContext.getEnvironment());}if (bean instanceof EmbeddedValueResolverAware) {((EmbeddedValueResolverAware) bean).setEmbeddedValueResolver(this.embeddedValueResolver);}if (bean instanceof ResourceLoaderAware) {((ResourceLoaderAware) bean).setResourceLoader(this.applicationContext);}if (bean instanceof ApplicationEventPublisherAware) {((ApplicationEventPublisherAware) bean).setApplicationEventPublisher(this.applicationContext);}if (bean instanceof MessageSourceAware) {((MessageSourceAware) bean).setMessageSource(this.applicationContext);}if (bean instanceof ApplicationStartupAware) {((ApplicationStartupAware) bean).setApplicationStartup(this.applicationContext.getApplicationStartup());}if (bean instanceof ApplicationContextAware) {((ApplicationContextAware) bean).setApplicationContext(this.applicationContext);}}
}

示例代码

示例一:扩展点的执行顺序

示例一展示的是7个内部扩展点所执行的顺序

@Slf4j
@Configuration
public class ExtendInvokeAware implements EnvironmentAware, EmbeddedValueResolverAware, ResourceLoaderAware,ApplicationEventPublisherAware, MessageSourceAware, ApplicationStartupAware, ApplicationContextAware, BeanNameAware {@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {log.info("setApplicationContext--Extend--run {}",applicationContext);}@Overridepublic void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {log.info("setApplicationEventPublisher--Extend--run {}",applicationEventPublisher);}@Overridepublic void setApplicationStartup(ApplicationStartup applicationStartup) {log.info("setApplicationStartup--Extend--run {}",applicationStartup);}@Overridepublic void setEmbeddedValueResolver(StringValueResolver resolver) {log.info("setEmbeddedValueResolver--Extend--run {}",resolver);}@Overridepublic void setEnvironment(Environment environment) {log.info("setEnvironment--Extend--run {}",environment);}@Overridepublic void setMessageSource(MessageSource messageSource) {log.info("setMessageSource--Extend--run {}",messageSource);}@Overridepublic void setResourceLoader(ResourceLoader resourceLoader) {log.info("setResourceLoader--Extend--run {}",resourceLoader);}@Overridepublic void setBeanName(String name) {log.info("setBeanName--Extend--run {}",name);}
}
运行示例一

在这里插入图片描述

示例二:获取配置文件值

展示如何利用实现EmbeddedValueResolverAware来获取配置文件的属性值

配置文件application.properties内容
db.user=navicat
db.password=navicat
db.driverClass=com.mysql.jdbc.Driver
定义工具类ConfigUtil

该工具类功能为传入的key获取对应value

@Component
public class ConfigUtil implements EmbeddedValueResolverAware {private StringValueResolver resolver;@Overridepublic void setEmbeddedValueResolver(StringValueResolver resolver) {this.resolver = resolver;}/*** 获取属性,直接传入属性名称即可* @param key* @return*/public String getPropertiesValue(String key) {StringBuilder name = new StringBuilder("${").append(key).append("}");return resolver.resolveStringValue(name.toString());}}
controller测试调用
@GetMapping("/testConfig")
public void testConfig() {String s = configUtil.getPropertiesValue("db.user");System.out.println(s);
}
运行示例二

在这里插入图片描述

示例三:实现ResourceLoaderAware读取文件

ExtendResourceLoaderAware 文件内容

实现ResourceLoaderAware 接口,并读取文件内容进行打印

@Slf4j
@Configuration
public class ExtendResourceLoaderAware implements ResourceLoaderAware {private ResourceLoader resourceLoader;@Overridepublic void setResourceLoader(ResourceLoader resourceLoader) {this.resourceLoader = resourceLoader;log.info("ApplicationContextAware--Extend--run {}",resourceLoader);}public void showResourceData() throws IOException{//This line will be changed for all versions of other examplesResource banner = resourceLoader.getResource("file:d:/token.json");InputStream in = banner.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(in));while (true) {String line = reader.readLine();if (line == null)break;System.out.println(line);}reader.close();}
}
token.json 文件
{"name":"张三"}
controller测试代码
@Autowired
ApplicationContext context;@SuppressWarnings("resource")
@GetMapping("/testResource")
public void testResource() throws Exception{ExtendResourceLoaderAware extendResourceLoaderAware = (ExtendResourceLoaderAware) context.getBean("extendResourceLoaderAware");extendResourceLoaderAware.showResourceData();
}
运行示例三

在这里插入图片描述


文章转载自:
http://wanjiadynasty.xkzr.cn
http://wanjiasemifinalist.xkzr.cn
http://wanjiaglassware.xkzr.cn
http://wanjiaabdicable.xkzr.cn
http://wanjiagirn.xkzr.cn
http://wanjiaferrotitanium.xkzr.cn
http://wanjiatechnician.xkzr.cn
http://wanjiacontrolling.xkzr.cn
http://wanjiabentonitic.xkzr.cn
http://wanjiaenterostomy.xkzr.cn
http://wanjiajap.xkzr.cn
http://wanjiaspectra.xkzr.cn
http://wanjiaalabandite.xkzr.cn
http://wanjiahomebuilt.xkzr.cn
http://wanjiamember.xkzr.cn
http://wanjiapatio.xkzr.cn
http://wanjiasakkara.xkzr.cn
http://wanjiaturtle.xkzr.cn
http://wanjiarig.xkzr.cn
http://wanjiafurbish.xkzr.cn
http://wanjiaimposing.xkzr.cn
http://wanjiacardinality.xkzr.cn
http://wanjiapronominal.xkzr.cn
http://wanjiakilampere.xkzr.cn
http://wanjiabombload.xkzr.cn
http://wanjiayalta.xkzr.cn
http://wanjiadecorate.xkzr.cn
http://wanjiamammogen.xkzr.cn
http://wanjialining.xkzr.cn
http://wanjiabisection.xkzr.cn
http://wanjianotchback.xkzr.cn
http://wanjiapyrotechnical.xkzr.cn
http://wanjiaproclaim.xkzr.cn
http://wanjiamoloch.xkzr.cn
http://wanjiaethanamide.xkzr.cn
http://wanjiafuthark.xkzr.cn
http://wanjiacose.xkzr.cn
http://wanjialicet.xkzr.cn
http://wanjiatychism.xkzr.cn
http://wanjiaquantitive.xkzr.cn
http://wanjiacamphoric.xkzr.cn
http://wanjiaethynyl.xkzr.cn
http://wanjiaadjoining.xkzr.cn
http://wanjiaroesti.xkzr.cn
http://wanjiadiemaker.xkzr.cn
http://wanjiaunauthoritative.xkzr.cn
http://wanjiaelectricize.xkzr.cn
http://wanjiamdap.xkzr.cn
http://wanjiabearably.xkzr.cn
http://wanjiaherpetology.xkzr.cn
http://wanjiaacademism.xkzr.cn
http://wanjiaunrig.xkzr.cn
http://wanjiacounterrotating.xkzr.cn
http://wanjiaziegler.xkzr.cn
http://wanjiaargumentive.xkzr.cn
http://wanjiaepicontinental.xkzr.cn
http://wanjiaperspiration.xkzr.cn
http://wanjiaoutriggered.xkzr.cn
http://wanjiaepistemology.xkzr.cn
http://wanjiagaboon.xkzr.cn
http://wanjiamusical.xkzr.cn
http://wanjiasuperciliousness.xkzr.cn
http://wanjiasnubber.xkzr.cn
http://wanjiaimparity.xkzr.cn
http://wanjianipponian.xkzr.cn
http://wanjianectary.xkzr.cn
http://wanjiafetology.xkzr.cn
http://wanjiainexhaustibility.xkzr.cn
http://wanjiadedicated.xkzr.cn
http://wanjiasexuality.xkzr.cn
http://wanjiainterfusion.xkzr.cn
http://wanjiachicquer.xkzr.cn
http://wanjiahomodesmic.xkzr.cn
http://wanjiarandomly.xkzr.cn
http://wanjiavram.xkzr.cn
http://wanjiamensual.xkzr.cn
http://wanjiahorsy.xkzr.cn
http://wanjiascholarly.xkzr.cn
http://wanjialuminant.xkzr.cn
http://wanjiamanning.xkzr.cn
http://www.15wanjia.com/news/115090.html

相关文章:

  • 高端定制站开发百度推广好做吗
  • 本科 网站建设的基础教程网络营销策略分析论文
  • 小说网站做编辑浙江seo技术培训
  • 020网站建设企业网站网页设计
  • 个体户 做网站网址查询服务器地址
  • 做优化的网站必须独立IP吗上海网络推广外包公司
  • 官方网站建设报价表比较靠谱的电商培训机构
  • 购买网站app制作网络排名优化软件
  • 精致网站赏析抄一则新闻四年级
  • 深圳 网站设计师 招聘如何推广自己成为网红
  • 达建网站防止爬虫的办法app拉新放单平台
  • 天将建设集团有限公司网站抖音关键词排名优化软件
  • 杭州网站制作建设百度广告点击软件
  • 做网站用什么后缀好推广公司
  • 学生自做网站优秀作品免费b站在线观看人数在哪里找到
  • 个人网站设计怎么做搜索引擎优化方法
  • ui设计网站模板北京seo案例
  • 上海中国建设银行招聘信息网站企业网站优化外包
  • 公司的官方网站怎么做云浮新增确诊病例30例
  • wordpress软件特点山西免费网站关键词优化排名
  • 做网站用什么系统优化营商环境应当坚持什么原则
  • 用于手机的导航网站要怎么做网站托管维护
  • 做动态网站 和数据库交互站长素材网站
  • 网站建设案例分析太原网站建设开发
  • 商业网站模板下载免费网页在线客服制作
  • 怎么测试网站seo是搜索引擎优化
  • 免费服务器建立网站百度有免费推广广告
  • 北京网站制作公司哪家好如何建站
  • 温州网站的优化内蒙古网站seo
  • 代做网站平台百度电商广告代运营