Spring bean的工具类
@Slf4j
@Component
public class SpringUtils implements ApplicationContextAware {
/**
* spring 的容器对象
*/
private static ApplicationContext ctx;
/**
* 从 spring 容器中获取指定名称以及类型的对象
* @param beanName 独享在 spring 容器中的名字
* @param clazz 对象的类型
* @param <T>
* @return
*/
public static <T> T getBean(String beanName, Class<T> clazz) {
return ctx.getBean(beanName, clazz);
}
/**
* 从 spring 容器中获取指定名称以及类型的对象
* @param clazz 对象的类型
* @param <T>
* @return
*/
public static <T> T getBean(Class<T> clazz) {
return ctx.getBean(clazz);
}
/**
* 从 Spring 容器中获取指定名称以及类型的对象
* @param beanName 对象在 Spring 容器中的名字
* @param <T>
* @return
*/
public static <T> T getBean(String beanName) {
return (T) ctx.getBean(beanName);
}
@Override
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
log.info("[Spring 工具] Spring 容器启动完成, 保存容器对象成功");
// 将 Spring 给我们的容器对象保存到当前类的静态成员中
SpringUtils.ctx = ctx;
}
}
前类中有方法需要获取 Spring 容器中的对象. 但是该类无法交给 Spring 容器管理, 此时就需要封装一个 SpringUtils 工具类
public class demo {
public static void main(String[] args) {
// 从 Spring 容器中获取对象
User user1 = SpringUtils.getBean("myUser", User.class);
User user2 = SpringUtils.getBean(User.class);
}
}