在Spring或Springboot项目中,时常需要使用注解完成变量的依赖注入,多使用在controller层和service层上,依赖注入的注解有4个,本文介绍其中常用的3种,未介绍的注解是@Qualifier,可自行学习了解。
本文面向初学者,故只介绍最基础的用法,力求简单清晰。
一、@Value
@Value注解的成员变量通常为基本数据类型及其包装类,以及String类型,用于直接给该变量赋值。
常用于从*.properties
或*.yml
配置文件中取值并注入。
示例:
- yml配置文件
# properties.yml配置文件存放属性
configVar:
var1: abcd # 这是一个字符串
var2: 1234 # 这是一个整数
var3: true # 这是一个布尔值
- Spring项目
// Spring(boot)项目中给变量注入值
public class TestController {
@Value("${configVar.var1}")
private String var1;
@Value("${configVar.var2}")
private Integer var2;
@Value("${configVar.var3}")
private Boolean var3;
...
}
@Value也可以注入数组、List等java自带类型,可参考:
https://blog.csdn.net/wangooo/article/details/114018690
二、@Autowired
@Autowire作用在自定义的成员变量上,自动装配,使用的是byType策略,即根据变量类型从ioc容器中查找,使用该注解需要在对应的类上挂以下注解中的一个(以将对象注入ioc容器):
- @Componet:通用,无语义
- @Controller:写在控制层(controller)类上
- @Service:写在业务层(service)实现类上
- @Repository:写在数据访问层(dao)实现类上
示例: - 数据访问层(dao)实现类
// 在ioc容器中创建该类的对象
@Repository
public class DemoDao {
...
}
- 业务层(service)实现类
// @Autowired注解查找DemoDao类型并装配
public class DemoServiceImpl {
@Autowired
private DemoDao demoDao;
}
三、@Resource
@Resource作用在自定义的成员变量上,自动装配,先基于byName策略,即根据变量的名称从ioc容器中查找,如果没有找到再使用byType策略装配,该注解不是由Spring官方提供的,而是由EJB框架提供。在Springboot项目中,对应的类可不使用@Componet等注解。
示例:
- 数据访问层(dao)实现类
// Springboot项目中的Dao
public interface TestDao extends BaseMapper<Test> {
...
}
- 业务层(service)实现类
// 使用@Resource注意变量名为类名首字母小写
public class TestServiceImpl extends ServiceImpl<TestDao, Test> implements TestService {
@Resource
private UserCartDao userCartDao;
}
@Autowired和@Resource可通用,但推荐使用@Resource。