本文准备探讨一下spring静态属性注入相关的问题,但是首先我们必须明确,不推荐通过spring对静态属性进行注入。静态属性属于class类的属性,通过实例对类属性进行修改,是spring框架不推荐的操作方式,所以spring不提供静态属性的直接注入。如遇到需要在utils里面使用静态属性的情况,可以在spring中注册bean,在通过上下文对象调用getBean的方式获取并使用。
可能你会说,如果我非要对基于spring框架对静态属性进行注入动作呢,
这里我们可以通过一些特殊的操作,实现此类注入,希望能让大家对spring注入有些更深的了解,比较常见的方法有以下几种:
一、@PostConstruct方式实现:
为了实现对静态的属性,引入@PostConstruct注解,此注解被用来修饰一个非静态的void()方法。注解的方法会在项目启动的时候执行,也可以理解为在spring容器启动的时候执行,并且只会被服务器执行一次。具体执行时间在构造函数执行生成实例,bean的属性注入完成之后。一般用于执行一些数据的常规初始化动作。所以我们可以通过以下方式实现静态属性的注入
在启动springboot的时候,在init方法里面打上断点,会得到如下结果:
我们可以发现,在init方法执行之前url属性已经完成注入,在init方法执行完成之后,callBackUrl成功获取到了我们需要注入的值,注入成功
二、通过set方法进行注入
同样在赋值操作进行的操作打上断点,会得到如下结果
callBackUrl属性成功注入,这里需要注意的点在于,set方法不能是静态的,否则也会注入失败,相当于重写了setter方法,spring把callBackUrl当成了非静态属性进行处理。
三、xml注入
xml注入其实有两种常见实现,主要是把类作为一个bean在xml中进行注册,一种实现是在注册的同时,定义init-method实现赋值操作,有点像PostConstruct方式实现。另外一种实现和第二种方式也很相似,主要是xml注册bean,然后重写set方法,重写成非静态的。这里就不一一说明了,大家可以自己进行尝试。
以上就是常用的静态属性注入的三种方式了,这里我们还是要说一句,不推荐对静态属性进行注入动作,用实例去修改class类属性,容易引发其他问题,在编程过程中,应该尽量减少这种操作。