场景:一个月黑风高的晚上,我立下flag,做完这个功能就睡觉,结果就一直卡在了Service实现类中注入的Repository为空的问题,因为没有使用xml文件配置,导致也不知道从何下手,在网上查找的方法也不管用,比如检查注解是否完全、,我们下面直接来解决
一般来说,你要保证注入的对象在Spring的管理池中,怎么确定呢?
一般在对应类上加上注解即可
有关Service的实现类:@Service
有关Controller的实现类:@Controller
有关Repository的接口或类:@Repository
还有一些@Component、@Configuration、@Bean等一些注解,具体的可以将这些类交给Spring来帮我们管理
我们先来看看问题
注入的对象为null???不能理解
但是我这些注解都配置好了啊,那怎么办呢?
最后我的解决方案就是在配置类文件夹中新建一个类ApplicationContextAwareGetBean.class来实现ApplicationContextAware接口,重写接口中的方法
直接上代码
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class ApplicationContextAwareGetBean implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.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);
}
}
我最终就通过这个配置类来获取我们想要的bean对象
然后在想要注入的类中直接调用即可