一, 目的
写了一个项目, 多个 module, 然后想在 A 模块中实现固定的 config 注入, 当 B 模块引用 A 时候, 能够直接填写相对应的配置信息就行了. 但是遇到一个问题, B 引用 A 时候, A 的配置信息总是填充不了, 获取不到在 B 中配置好的信息. 猜测原因: 因为项目的的 bean 文件没有被统一管理.
二, ApplicationContextAware 接口
Spring 提供了 ApplicationContextAware 类, 通过它可以获取所有 bean 上下文.
也就是说, 当一个类实现了这个接口之后, 这个类就可以方便地获得 ApplicationContext 中的所有 bean.
换句话说, 就是这个类可以直接获取 Spring 配置文件中, 所有有引用到的 bean 对象.
三, 接口引用
1. 工具类 SpringContextUtil 实现 ApplicationContextAware 方法, 实现 setApplicationContext 方法即可
- public class SpringContextUtil implements ApplicationContextAware {
- private static ApplicationContext applicationContext; // Spring 应用上下文环境
- @Override
- public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
- SpringContextUtil.applicationContext = applicationContext;
- }
- /**
- * 获取对象
- *
- * @param name
- * @return Object 一个以所给名字注册的 bean 的实例
- * @throws BeansException
- */
- public static Object getBean(String name) throws BeansException {
- return applicationContext.getBean(name);
- }
- }
2. 业务调用
- public String getConfig() throws IOException {
- MyConfig myConfig = (MyConfig)SpringContextUtil.getContext().getBean("myConfig");
- System.out.println("my config is"+myConfig.toString());
- return myConfig.toString();
- }
- 3.MyConfig
只是一个正常 properties 的配置映射.
来源: http://www.bubuko.com/infodetail-2600535.html