Spring @AutoWired注解用法解释(超级易懂)
@Autowired的应用场景
我们开启Spring服务的时候,它会根据声明先扫描配置文件中的bean(注解配置同理), 再根据bean中类的全限定名去寻找它,一般为我们自己声明的pojo(实体类), 然后这时如果有@Autowired注解则会根据类型寻找其它的被Spring托管的bean进行自动注入, 调用默认的构造函数。
用法解释
下面看一个简单的例子:
这里是一个spring项目的基本结构
我们有三个实体类并且都是spring的bean
Test方法
注意到我们这里的people类中的cat和dog上都标注了@Autowired,我们都很清楚对象的声明创建过程, 类似于people的组合类需要先创建cat对象和dog对象的实例, 而依靠spring的依赖注入(cat和dog已被spring托管), 我们再加上@Autowired, spring便会自动的为我们在bean中寻找和注解下类型匹配的bean去进行自动注入。 借此机制我们可以省略掉set方法, 构造方法。
执行test方法
运行成功, 未报空指针异常, 说明cat和dog被自动创建及注入。
还有一个注意点是如果显示的定义了Autowired的required属性为false,说明这个对象可以为null,否则不允许为空
@Autowired(required = false)
使用的位置
我们可以在类中属性上,方法上使用@Autowired注解, 其中用在方法上时spring会将参数依次寻找bean注入, 需要注意的是参数一定都要找到能够匹配的bean, 否则会报出异常
org.springframework.beans.factory.BeanCreationException
@Autowired和@Qualifier组合使用
如果您在bean中有相同的类的全限定名, 那么在应用@Autowired时按照逻辑来说就会出现歧义, 这时spring为我们准备了@Qualifier注解来解决这个问题。
public class People{
@Autowired
@Qualifier(value = "cat11")
private Cat cat;
@Autowired
@Qualifier(value = "dog222")
private Dog dog;
private String name;
}
在这里由于spring无法由类型去装配了,使用@Qualifier可以通过byName方式去寻找标准就是bean的id(唯一限定名)。
@AutoWired和@Resource的区别?
@AutoWired默认以类型进行查找,@Resource默认以名称进行查找
@AutoWired(required=false) + @Qualifier(“user”) == @Resource(name=“user”)
其中@Resource注解是jdk1.6后才有的
结语
以上为个人的一点理解,说的可能不对欢迎指正。
熊猫发电厂: 可以直接拖拽过来
wishingpep: 选中表后右键 New -> Virtual Foreign Key ,或者用官方文档里写的创建方式:https://www.jetbrains.com/help/datagrip/virtual-foreign-keys.html
CityStep: wc我弄了一晚上还装了好几个版本
m0_74295394: 还是失败了
再犯: 磁盘不生成out无法创建 类 怎么解决