- @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上
@Autowired详解:
默认按类型进行装配(这个注解是属于spring的,所以类上需要写@Component/@Controller/@Service/@Repository),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,例如:@Autowired(required=false)
如果只使用一个@Autowired,在spring项目中,@Autowired注解下面的类名就对应bean标签中的class对应的类;在springboot项目中,@Autowired注解下面的类名就对应方法返回值的类型;无论是spring还是springboot,@Autowired下面的类名后面的属性名可以 随意写,不用写成bean的id或者是对应的@Bean注解下面的方法名
如果同一个class类注册的bean有多种,那我们就需要结合@Qualifier注解进行使用,然后按照名称进行装配,如下Java代码:
@Autowired
@Qualifier(“baseDao”)
private BaseDao baseDao;
如果使用了@Qualifier ,在spring项目中,@Qualifier后面的name的值对应bean标签中的id的值;在springboot项目中,@Qualifier后面的name的值对应方法名称;如果按照这样做的话,@Qualifier下面的类名后面的名称,例如我们上面的baseDao不必和spring项目中bean标签中id的值,以及springboot项目中的方法名称一致
@Resource详解:
@Resource 是JDK1.6支持的注解,默认按照名称进行装配,名称可以通过name属性进行指定,例如:@Resource(name="restHighLevelClient")
,如果name属性一旦指定,就只会按照名称进行装配,找不到对应名称的话就报错
如果通过name属性进行指定,在spring项目中,@Resource注解后面的name属性的值对应的就是bean标签的id;在springboot项目中,@Resource注解后面的name属性的值对应的就是方法的方法名;无论是spring项目还是springboot项目,@Resource注解下面的类名后面的名称随意写
如果没有指定name属性,当注解写在字段上时,默认取类名的首字母小写,类名的其他部分依然按照驼峰命名法作为名称(“拿上面所说的名称”就指代该名称)
如果没有指定name属性,在spring项目中,拿上面所说的名称找到对应的bean标签的id;在springboot项目中,拿上面所说的名称找到对应的方法名称;无论是spring项目还是springboot项目,@Resource注解下面的类名后面的名称随意写
如果没有指定name属性并且找不到与拿上面所说的名称对应的spring中的bean标签的id值或者springboot显示中的方法名称,我们就需要按照类型进行装配,如果是这种情况,那你就按照 2. @Autowired详解:中的第一种情况处理,但是无论是spring项目还是springboot项目,@Resource注解下面的类名后面的名称随意写
@Autowired和@Resource的区别
最新推荐文章于 2024-08-19 20:55:47 发布