赞
踩
在一个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);
}
}
至此, 问题完美解决!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。