Bootstrap

java static spring_static静态方法内调用Spring(依赖注入)的bean

前言:一般需要在static方法里调用注入进来的service,因为是静态方法,所以必须声明该service也必须是static的,这时候你会发现注入不进来,会报null指针,这个时候需要使用 @PostConstruct来解决。

第一种

Spring也基于JSR-250注解,包括@PostConstruct,@PreDestroy和@Resource 注解。虽然这些注释都没有真正必需的,因为你已经有其他的候补,但还是让我给他们有关一个简单的想法。@PostConstruct 和@PreDestroy 注解:要定义安装和拆卸一个bean,我们只是声明了初始化方法和/或销毁,方法的参数。在init-method属性指定一个方法,是被称为bean上后立即实例化。同样,销毁规定了被称为bean被从容器中取出之前的方法。

注解@PostConstruct 这个其实就是类似声明了,当你加载一个类的构造函数之后执行的代码块,也就是在加载了构造函数之后,就将service复制给一个静态的service。类上需要用@Component

//解决static方法 调用注入对象的方法

@Autowired

private ConfigDaoImpl configDaoImpl;

private static ConfigUtil configUtil;

@PostConstruct

public void initialize() {

//@Component will call construct

configUtil = this;

}

第二种,通过set方法注入,类上需要用@Component

//解决static方法 调用注入对象的方法

private static UserService userService;

@Autowired

public void setUserService(UserService userService) {

DubboAuthService.userService = userService;

}

;