Java 普通类实现spring bean的自定装载
程序员文章站
2022-03-03 11:50:27
...
工作需要做一个定时器,但无法实现spring bean的装载,总是报空指针。
写一个SpringContextUtils类实现ApplicationContextAware接口实现。Spring 提供了ApplicationContextAware类,通过它可以获取所有bean上下文。
import java.util.Map;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
* 获取ApplicationContext和Object的工具类
* @author yzl
*
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public class SpringContextUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
applicationContext = arg0;
}
/**
* 获取applicationContext对象
* @return
*/
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
/**
* 根据bean的id来查找对象
* @param id
* @return
*/
public static Object getBeanById(String id){
return applicationContext.getBean(id);
}
/**
* 根据bean的class来查找对象
* @param c
* @return
*/
public static Object getBeanByClass(Class c){
return applicationContext.getBean(c);
}
/**
* 根据bean的class来查找所有的对象(包括子类)
* @param c
* @return
*/
public static Map getBeansByClass(Class c){
return applicationContext.getBeansOfType(c);
}
}
在spring的xml文件中配置
<!--Spring中bean获取的工具类-->
<bean id="springContextUtils" class="com.travelsky.szky.cts.task.SpringContextUtils" />
然后手动装载
CounterInfoDao counterInfoDao = (CounterInfoDao)SpringContextUtils.getBean("counterInfoDao");
非web项目可以用ClassPathXmlApplicationContext模拟xml文件的加载
new ClassPathXmlApplicationContext("spring-mybatis.xml");
上一篇: 模拟Spring装载bean的方式
推荐阅读
-
FastJson序列化自定义返回字段,普通类从spring容器中获取bean
-
普通类注入不进spring bean的解决方法
-
Spring(18)——使用Java类的形式定义bean(二)
-
Spring Data JPA实现查询结果返回map或自定义的实体类
-
SpringBoot实现其他普通类调用Spring管理的Service,dao等bean
-
Spring 注解中,普通类获取@Service标记的方法 或者bean对象的两种方法
-
获取接口所有实现类的两种方法 spring和java spi
-
Java获取接口所有实现类的两种方法 spring和java spi
-
Spring中Bean的生命周期自定义销毁和初始化方法实现详解
-
Spring(18)——使用Java类的形式定义bean(三)