最近在使用idea开发时经常看到右侧栏有黄色一堆堆的,好恶心,这些代表代码不符合规范,可能会出现问题,为了代码整洁和代码规范,则优化一把,重点记录下autowired注解优化。
@autowired含义
- spring 2.5引入了@autowired注释,@autowired注释可以对类成员变量、方法、构造函数进行标注,完成自动装配功能。@autowired查找bean首先是先通过byType查,如果发现找到有很多bean,则按照byName方式对比获取,若有名称一样的则可以加上@Qualifier("XXX")配置使用。若非必须装配则可以设置required=false
用法
类成员变量
@Autowired
private PamaDataAdminProdInfoRecordService pamaDataAdminProdInfoRecordService;
方法
private Person person;
@Autowired
private void setPerson(Person person){
this.person = person;
}
构造函数(推荐)
private final PamaAdminCompanyChannelMapService pamaAdminCompanyChannelMapService;
@Autowired
public PamaAdminCompanyChannelMapController(PamaAdminCompanyChannelMapService pamaAdminCompanyChannelMapService){
this.pamaAdminCompanyChannelMapService = pamaAdminCompanyChannelMapService;
}
回到今天问题idea提示:
Field injection is not recommended less... (Ctrl+F1)
Inspection info: Spring Team recommends: "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies".
大致含义
始终在bean中使用基于构造函数的依赖注入。 始终使用断言来强制依赖
那也就是说要将成员变量改为构造函数方式,用了好久成员变量突然看到这个开始怀疑人生了,baidu、google下看看原因吧!
看到一个大神分享的文章:idea提示@autowired使用构造函数注释
最重要的一句是“java变量初始化顺序是静态变量或静态语句块->实例变量或初始化语句块->构造方法->@autowired”
根据@autowired学习更新了我脑子里的一个知识点:spring扫描注解如@service,将此注解标注的类加入到ioc容器管理,如果有地方需要用的话需要通过@autowird自动装配方式,从ioc容器查找,返回给该属性