静态方法引入非静态变量

场景:某业务场景存在需要对信息进行加密处理,规则存在一个固定的加密字符串,由于字符串暴露在代码中不安全,因此接入了KMS系统,由于该系统也需要进行token验证且存在环境配置,需要将其维护在不同的配置文件中。加密方法由于是一个工具类,因此使用了static,成为了静态方法,但是因为调用KMS相关 需要传参 将上述信息等传入,这时候考虑到使用@Value获取字段信息,这样就出现了 需要在静态方法中引入非静态变量的场景。

理论:正常情况下 静态方法是不能使用非静态变量,但是如果你将字段设置成静态变量,由于加载顺序的问题,会导致 该静态变量取到null,原因是@Value这些加载晚于静态变量、方法的形成。

解决方案:通过传递实例化对象来实现,调用静态方法时,传递一个实例化的对象作为参数,以便在方法中引用非静态变量。

@PostConstruct注解被用来做为应用程序启动完成后需要执行的一些初始化方法的注解
这里用到了这个注解,但是需要注意这个注解在某些情况下会有问题

@PostConstruct注解被用来修饰一个非静态的方法,被该注解修饰的方法会在加载Servlet的时候执行,并且只会被执行一次。
这个注解是用来作为Servlet生命周期控制的注解,用在这方面没问题,但是,如果再在里面做加载bean的动作就不行了。因为在执行被该注解方法的时间点上,它只能保证自己的bean被装载,但并不能保证所有被需要的bean被装载,所以在方法内加载bean会报错,导致初始化异常。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值