前言:通常须要在static方法里调用注入进来的service,由于是静态方法,因此必须声明该service也必须是static的,这时候你会发现注入不进来,会报null指针,这个时候须要使用 @PostConstruct来解决。java
第一种函数
Spring也基于JSR-250注解,包括@PostConstruct,@PreDestroy和@Resource 注解。虽然这些注释都没有真正必需的,由于你已经有其余的候补,但仍是让我给他们有关一个简单的想法。@PostConstruct 和@PreDestroy 注解:要定义安装和拆卸一个bean,咱们只是声明了初始化方法和/或销毁,<bean>方法的参数。在init-method属性指定一个方法,是被称为bean上后当即实例化。一样,销毁规定了被称为bean被从容器中取出以前的方法。this
注解@PostConstruct 这个其实就是相似声明了,当你加载一个类的构造函数以后执行的代码块,也就是在加载了构造函数以后,就将service复制给一个静态的service。类上须要用@Component.net
//解决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; }
博客地址:http://my.oschina.net/wangniancode