在日常使用spring中,用注解开发比较多,包括 @Repository @Autowird等,但是有时候需要的对象是带参构造函数的,这个时候使用@Repository就会报错,而直接在使用处new的话,由于引用的对象用了 @Repository被spring容器管理,会造成空指针的现象。所有就遇到了矛盾
此时,我们不妨转换一下思路,在需要new的对象里不要用@Autowird,直接用ApplicationContext获取
package com.bdyh.utils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
//获取ioc容器对象工具类
//通过实现ApplicationContextAware 接口,来获取spring bean容器
@Component
public class GetBeanUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
GetBeanUtil.applicationContext = applicationContext;
}
//获取applicationContext
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
//通过name获取 Bean.
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
//通过class获取Bean.
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
//通过name,以及Clazz返回指定的Bean
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
//应用处
public class IdentifyLawRun implements Runnable {
private TestMapper3 testMapper3 = GetBeanUtil.getBean(TestMapper3.class);
}