Spring 的 @Autowired 与 @Resource

192 阅读2分钟

这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战

前言

上一次为大家带来了六边形架构的好处,这次为大家来夯实基础,对基础部分进行深入理解。本篇章讲述Spring中的两个注解,一个为原生注解Resource为javax包下,第二个为AutoWired注解来源于Spring包下。

注解

简单谈下注解,这里不做展开,后面篇章给大家详细讲解注解内容。注解大家可以把它看做是一个标志,一个属于自己的标志,这个标志可以带你想到的值,注解的形式一般为

@Business(name = "业务1", skip = true)

注解可以写在类上、接口上、方法上、属性上,但是放在那里需要注解内部指定。然后一般都是通过反射获取注解,以及注解中的值,注解本身是一个类来的。

@Autowired

了解了注解,我们来看下Autowired自动注入注解,这个大家都在熟悉不过了,使用java的百分之70的人基本都是Spring 工程师,这个注解只能放在属性上,常用在业务类注入, 也就是bean的注入,他的实现其实是Spring通过反射获取autowired注解来调用你的属性类的set方法来进行值注入。当然也可以不用autowired来注入bean,也可以通过构造器注入,当然官方也建议使用构造器注入,因为它不会带来循环引用问题。

Autowired注解为按类型查找bean,也就是你这个类为接口,如果有两个实现类那么注入就会失败,所以autowired经常会与## @Qualifier一起使用才可以解决这个问题,@Qualifier的值可以指定类名 或者 bean名字来注入。

@Autowired
private AeratorBusiness business;

Resource

@resource注解其实跟Autowired的方向一样,也是可以注入bean,但是resource默认是以name来注入,当然你也可以选择以type来注入,所以resource是两个双修。

resource可以同时指定name 与 type ,这就相当于找了唯一的bean,如果找不到的话他会报错

@Resource(name = "A")

@Resouce(type = "B")