
- 1、执行注入工具类
- 2、容器启动读取配置文件并调用注入方法
- 3、配置类详情
- 4、配置文件详情
@Component
public class ApplicationContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
/**
* 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
ApplicationContextUtil.applicationContext = applicationContext;
}
/**
* 判断当前bean是否已经存在
*
* @param beanName
* @return
*/
public static Boolean isBeanExit(String beanName) {
try {
applicationContext.getBean(beanName);
} catch (Exception e) {
return false;
}
return true;
}
/**
* 动态注入单例bean实例
*
* @param beanName bean名称
* @param singletonObject 单例bean实例
* @return 注入实例
*/
public static Object registerSingletonBean(String beanName, Object singletonObject) {
//将applicationContext转换为ConfigurableApplicationContext
ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext;
//获取BeanFactory
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getAutowireCapableBeanFactory();
//动态注册bean.
defaultListableBeanFactory.registerSingleton(beanName, singletonObject);
//获取动态注册的bean.
return configurableApplicationContext.getBean(beanName);
}
}
2、容器启动读取配置文件并调用注入方法
@Component
@Slf4j
public class AliyunDbFactory implements ApplicationListener<ContextRefreshedEvent> {
private final CloudDbProperties cloudDbProperties;
public AliyunDbFactory(CloudDbProperties cloudDbProperties) {
this.cloudDbProperties = cloudDbProperties;
}
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
for (AliyunDb aliyun : cloudDbProperties.getAliyuns()) {
//根据配置文件内容,构建bean,并注入
ApplicationContextUtil.registerSingletonBean("beanName", new Object());
}
}
}
3、配置类详情
@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix = "xx.yy.zz")
public class CloudDbProperties {
private List<AliyunDb> aliyuns;
@Getter
@Setter
@ToString
public static class AliyunDb implements Serializable {
private String companyId;
private String ecsAccessKeyId;
private String ecsAccessSecret;
}
}
4、配置文件详情
xx:
yy:
zz:
aliyuns:
- company-id: 123
ecs-access-key-id: LTAI4Fmb3HCMWN59T7v2MBSD
ecs-access-secret: 4DbnjVGr7DQ1wWzForWppTzAUk6ppf
- company-id: 456
ecs-access-key-id: XXXXXXXXXXXXXX
ecs-access-secret: YYYYYYYYYYYYYYYY
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)