静态代码块和spring注入的先后顺序 | 您所在的位置:网站首页 › 静态块和构造方法执行顺序 › 静态代码块和spring注入的先后顺序 |
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 实验室设备网 版权所有 |