目前我很担心如何从我的线程类中的数据库中获取数据。
我不能创建我的线程类的bean,因为每个请求都会创建一个新的实例。
MyThread.class
class MyThread implements Runnable{
public void run(){
//How to get Employee data and also data from other tables.??????
}
}
EmployeeDAO.class
@Component("employeeDAO")
public class EmployeeDAO {
@Cacheable(value = "employeeCache")
public List<Employee> getEmployees() {
//got data from database
return employees;
}
}
获取上下文并从上下文中获取dao bean并在每个我的线程类中使用是否很好?
你能建议或分享代码如何解决我的上述问题吗?
答案 0 :(得分:1)
我找到了this site的一个解决方案。
以下解决方案是好还是不好?如果不好那么解决方案的缺点是什么
这是我尝试并取得成功的原因
@Service
public class StaticContextHolder implements ApplicationContextAware {
public static ApplicationContext CONTEXT;
public StaticContextHolder() {
}
public static Object getBean(String s) {
return CONTEXT.getBean(s);
}
public static <T> T getBean(String s, Class<T> tClass){
return CONTEXT.getBean(s, tClass);
}
public static <T> T getBean(Class<T> tClass){
return CONTEXT.getBean(tClass);
}
public static Object getBean(String s, Object... objects){
return CONTEXT.getBean(s, objects);
}
public static boolean containsBean(String s) {
return CONTEXT.containsBean(s);
}
@Override
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
System.out.println("ApplicationContext initialized");
CONTEXT = arg0;
}
}
class MyThread implements Runnable{
public void run(){
EmployeeDAO employeeDAO = StaticContextHolder.getBean(EmployeeDAO.class);
}
}