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

在Spring项目中,由于静态方法不能直接使用@Autowired注解注入Bean,因此可以通过@PostConstruct注解在工具类的非静态方法中初始化Bean,并将其赋值给静态变量。这样既能保证Bean的注入,又避免了线程不安全的问题。在Bean初始化过程中,构造方法先执行,然后是依赖注入,最后执行@PostConstruct注解的方法。
摘要由CSDN通过智能技术生成

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

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

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

PostConstruct注释规则

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

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

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

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

Constructor > @Autowired > @PostConstruct

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值