ApplicationInitlizer接口与Spring工具类
写点笔记
共 4813字,需浏览 10分钟
· 2021-07-22
有了上述思想,我们就能想到在spring框架中,上下文是我们重点关切得对象。因此我们想着通过static来引用spring上下文,然后形成一个工具类。我们在项目得业务部分能够通过该工具类来操作我们得spring上下文。这块我们说一下spring扩展接口ApplicationContextInitializer,这个接口会在spring上下文刷新之前进行调用,相当于提前将容器进行对外得暴露,当然页提供了我们修改其属性得权力。ApplicationContextInitializer得执行在prepareContext中,这块之前也大概得说过了。
protected void applyInitializers(ConfigurableApplicationContext context) {
Iterator var2 = this.getInitializers().iterator();
while(var2.hasNext()) {
ApplicationContextInitializer initializer = (ApplicationContextInitializer)var2.next();
Class requiredType = GenericTypeResolver.resolveTypeArgument(initializer.getClass(), ApplicationContextInitializer.class);
Assert.isInstanceOf(requiredType, context, "Unable to call initializer.");
initializer.initialize(context);
}
}
public class MyBean {
private String name;
private String config;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getConfig() {
return config;
}
public void setConfig(String config) {
this.config = config;
}
public String toString() {
return "MyBean{" +
"name='" + name + '\'' +
", config='" + config + '\'' +
'}';
}
}
public class MySpringContentUtils {
public static ConfigurableApplicationContext context;
public static ConfigurableApplicationContext getContext() {
return context;
}
public static void setContext(ConfigurableApplicationContext context) {
MySpringContentUtils.context = context;
}
public static void registerBean(String name, Class factoryClazz, Class beanClazz, MutablePropertyValues mpv) throws BeanDefinitionStoreException {
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(beanClazz);
GenericBeanDefinition beanDefinition = (GenericBeanDefinition)beanDefinitionBuilder.getRawBeanDefinition();
beanDefinition.setBeanClass(factoryClazz == null ? beanClazz : factoryClazz);
beanDefinition.setPropertyValues(mpv);
BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry)context.getBeanFactory();
beanFactory.registerBeanDefinition(name, beanDefinition);
}
public staticT getBean(String name) throws BeansException {
return (T) context.getBean(name);
}
}
public class MyTianApplicationInitlize implements ApplicationContextInitializer {
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
System.out.println("我来了...宝");
MySpringContentUtils.setContext(configurableApplicationContext);
}
}
public static void main(String[] args) throws InterruptedException {
SpringApplication builder=new SpringApplicationBuilder(Demo1Application.class).initializers(new MyTianApplicationInitlize()).build();
builder.run( args);
System.out.println(env.toString());
MutablePropertyValues mpv = new MutablePropertyValues();
mpv.addPropertyValue("name","tianjingle_initlizer");
MySpringContentUtils.registerBean("lisi",null, MyBean.class,mpv);
MyBean myBean= (MyBean) MySpringContentUtils.getContext().getBean("lisi");
System.out.println(myBean.toString());
}
public static void main(String[] args) throws InterruptedException {
// SpringApplication builder=new SpringApplicationBuilder(Demo1Application.class).initializers(new MyTianApplicationInitlize()).build();
// builder.run( args);
SpringApplication.run(Demo1Application.class,args);
System.out.println(env.toString());
MutablePropertyValues mpv = new MutablePropertyValues();
mpv.addPropertyValue("name","tianjingle_initlizer");
MySpringContentUtils.registerBean("lisi",null, MyBean.class,mpv);
MyBean myBean= (MyBean) MySpringContentUtils.getContext().getBean("lisi");
System.out.println(myBean.toString());
}
首页图片来自:周冬雨-Sogou百科
https://baike.sogou.com/v39745781.htm
评论
common工具类工具类包
common是一些工具类的集合,要求JDK1.7或以上版本,只要使用java语言就可以使用它,它每个工具类的每个方法都对应者我在项目开发中遇到的场景,极具使用价值。它包括以下几个方面:1、common
common工具类工具类包
0
SkwishJava工具类
Alightweightlibraryforstoringblobsonthefilesystem.Skwish是一个轻量级的Java类库,用来将二进制数据保存到文件系统中。允许对文件进行并发的读写,
SkwishJava工具类
0
FinalGatherJava 工具类
finalGather是java项目的工具类项目包含。日期,字符串,文件,集合,拼音。json,加密,邮件等相关,以后会持续增加增加编程效率的工具类。
FinalGatherJava 工具类
0
SSToolkitiOS 工具类
SSToolkit可以说是iOS开发者最常使用的工具类之一,该开源项目提供了一个完整的iOS类库集合,用于解决iOS开发者在开发过程中常碰到的一些问题,比如追踪一款设备是否具有视网膜显示屏或是否能剪裁
SSToolkitiOS 工具类
0