当前位置:   article > 正文

SpringBoot框架自定义工具类静态方法如何注入Bean_springboot 静态类注入bean

springboot 静态类注入bean

问题来源:工具类一般都是静态方法,静态方法只能调用静态成员,然而通过@Autowired注入的Bean不是静态成员,如何解决?

解决方案:利用@PostConstruct注解,代码示例如下:

  1. //定义static类型的变量
  2. private static ApplicationEventPublisher thisApplicationEventPublisher;
  3. @Autowired
  4. private ApplicationEventPublisher applicationEventPublisher;
  5. @PostConstruct //通过该注解,将注入bean值set到工具类的变量中
  6. public void init() {//bean注入后执行一次,防止线程不安全,加锁。
  7. synchronized (TriggerEventHandler.class) {
  8. thisApplicationEventPublisher = applicationEventPublisher;
  9. }
  10. }

PostConstruct注释规则

1. 除了拦截器这个特殊情况以外,其他情况都不允许有参数,否则spring框架会报IllegalStateException;而且返回值要是void,但实际也可以有返回值,至少不会报错,只会忽略

2. 方法的权限使用public、protected、private都可以,功能是由反射来实现

3. 方法不可以是static的,但可以是final的

所以,综上所述,在spring项目中,在一个bean的初始化过程中,方法执行先后顺序为

Constructor > @Autowired > @PostConstruct

先执行完构造方法,再注入依赖,最后执行初始化操作,所以这个注解就避免了一些需要在构造方法里使用依赖组件的尴尬。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/798454
推荐阅读
相关标签
  

闽ICP备14008679号