如果在不是controller的地方想要注入dao或则servi
2019-12-30 本文已影响0人
momdiemg
两种解决办法
从已有的spring上下文取得已实例化的bean。通过ApplicationContextAware接口进行实现。
当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.context = applicationContext;
}
public static ApplicationContext getContext(){
return context;
}
}
然后再需要用到的地方
//@component 不用加这个注解
class test{
@Autowired
Dao dao;
public void a(){
dao=SpringContextUtil.getContext().getBean(Dao.class);
}
}
@component
class test{
@Autowired
private GlobalItemRepository globalItemRepository;
@Autowired
private GlobalItemService globalItemService;
@Autowired private ClientUserRepository clientUserRepository;
private static GlobalItemRepository globalItemRep;
private static GlobalItemService globalItemSe;
private static ClientUserRepository clientUserRep;
//初始化构造完成后注入上面的service或者dao,在spring容器启动的时候执行,可作为一些数据的常规化加载
@PostConstruct public void init(){
globalItemRep = this.globalItemRepository;
globalItemSe = this.globalItemService;
clientUserRep = this.clientUserRepository;
}
}