在一个java项目的普通类中想要使用service中的一个类来获取数据库中的数据,我这里是写一个工具类来记录数据到数据库, 需要调用service, 但是用完之后报错说是空指针异常,上网查了之后总结了一下解决办法,只需三步。
1、写一个工具类 SpringUtil
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public final class SpringUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
// TODO Auto-generated method stub
if (SpringUtil.applicationContext == null) {
SpringUtil.applicationContext = applicationContext;
}
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
// 通过
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
// 通过class获取Bean.
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
}
2、在Application启动类中将工具类导入,在类上面加入Import注解,不然依然无法使用
import com.xad.utils.SpringUtil;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Import;
@SpringBootApplication
@Import(SpringUtil.class)//这里!!!这里!!!这里!!!这个注解是重点
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
3、在普通类中做如下操作
(1)在类上面加入@Configuration注解
(2)在方法中通过getBean获取实例对象
import com.xad.service.system.UserInfoService;
import com.xad.entity.system.UserInfo;
import org.springframework.context.annotation.Configuration;
//普通类上面加入Configuration注解
@Configuration
public class SlfUtils {
public UserInfo getUserInfo() {
// 通过getBean()方法获取实例对象
UserInfoService userInfoService = SpringUtil.getBean(UserInfoService.class);
String token = "token";
return userInfoService.getUserByToken(token);
}
}
至此, 问题完美解决!