静态代码块和spring注入的先后顺序 您所在的位置:网站首页 静态块和构造方法执行顺序 静态代码块和spring注入的先后顺序

静态代码块和spring注入的先后顺序

2023-08-27 06:32| 来源: 网络整理| 查看: 265

1.哪个优先?

静态代码快的加载顺序优先于spring的容器的注入

比如:我有一个类

@Component public class TestService{ private Jedis jedis; static{ RedisService redisService=ApplicationContentUtil.getBean(RedisService.class); jedis=redisService.getResource(); } public void incr(){ //redis命令方法 } }

再上面的代码中通过静态内部类使用spring容器工具类获取注入的的service。

2.为什么报错?

因为静态代码块的加载顺序优先于容器,再调用静态代码快的时候,容器对象还没有被注入,

容器获取对象工具类如下:

@Component public class ApplicationContentUtil implements ApplicationContentAware{ private static ApplicationContent applicationContent; public void setApplicationContent(ApplicationContent applicationContent){ ApplicationContent.applicationContent=applicationContent; } public static T getBean(Class tclass){ return applicationContent.getBean(tclass); } }

这是一个获取容器内部的工具类,很常见,获取的方式可以进行自己进行扩展。

由于加载的顺序会导致application为null所以启动的时候会报空指针。

3.正确的写法 public class TestService{ private Jedis jedis; static{ RedisService redisService=ApplicationContentUtil.getBean(RedisService.class); jedis=redisService.getResource(); } public static void incr(){ //redis命令方法 } } 4.使用

然后我们就可以和平时使用静态工具类一样进行使用了

如:d

@Service public class Test2Service(){ public void test1(){ TestService.incr(); } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有