为了账号安全,请及时绑定邮箱和手机立即绑定

@Autowired @Resource 之类的注解和初始化块哪个先执行?

@Autowired @Resource 之类的注解和初始化块哪个先执行?

holdtom 2019-03-01 10:34:24
如下代码,出错了 public class MyController{ @Autowired private RedisTemplate<String, String> redisTemplate; SetOperations<String, String> setOperations; HashOperations<String, String, String> hashOperations; { setOperations = redisTemplate.opsForSet(); hashOperations = redisTemplate.opsForHash(); } 是不是注解没有初始化块先执行? 这种状况如何改?
查看完整描述

8 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

初始化块儿先执行然后再把对应的属性注入,所以你这里不能这样写你可以采用构造函数注入的方式试试

查看完整回答
反对 回复 2019-03-01
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

Spring在注入时,首先初始化类,然后根据@Autowired之类的注解进行注入。

@PostConstruct
public void init(){
    setOperations = redisTemplate.opsForSet();
    hashOperations = redisTemplate.opsForHash();
}

使用@PostConstruct注解。

查看完整回答
反对 回复 2019-03-01
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

建议看下《Java编程思想》中的初始化顺序相关内容。肯定是先初始化,再注入了。如果初始化都没完成,注入对象到哪里去呢?

查看完整回答
反对 回复 2019-03-01
?
米脂

TA贡献1836条经验 获得超3个赞

初始化优先级比较高,仅次于静态
这里可以使用PostConstruct注解,顺序上
Constructor >> @Autowired >> @PostConstruct

查看完整回答
反对 回复 2019-03-01
?
慕仙森

TA贡献1827条经验 获得超8个赞

你得把报错信息贴上来。

查看完整回答
反对 回复 2019-03-01
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

肯定是先初始化的,然后再完成注入的一系列操作

查看完整回答
反对 回复 2019-03-01
  • 8 回答
  • 0 关注
  • 1525 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号