Java随笔 | Spring项目中三种常用的依赖注入注解:@Value、@Autowired、@Resource

文章目录

  • 一、@Value
  • 二、@Autowired
  • 三、@Resource


在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。

你可能感兴趣的:(Java随笔,java,spring,spring,boot)