@autowired详解

3,477 阅读2分钟
最近在使用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容器查找,返回给该属性