@Autowired 和 @Resource
时间: 2023-07-11 14:53:10 浏览: 46
@Autowired和@Resource都是Spring框架中用来进行依赖注入的注解,它们的作用类似,但也有一些区别。
@Autowired是Spring提供的注解,它默认按照类型进行自动装配。如果有多个同类型的Bean,则需要通过@Qualifier注解指定具体的Bean名称。例如:
```java
@Autowired
@Qualifier("userService")
private UserService userService;
```
@Resource是J2EE的注解,它默认按照名称进行自动装配。如果没有指定name属性,则会将属性名作为Bean名称进行查找。例如:
```java
@Resource(name = "userService")
private UserService userService;
```
此外,@Resource还可以指定类型进行自动装配。例如:
```java
@Resource(type = UserService.class)
private UserService userService;
```
另外,@Resource还有一个重要的特性,它可以注入非Spring容器管理的对象。如果指定的name属性在Spring容器中找不到Bean,则会尝试从JNDI(Java Naming and Directory Interface)中查找对应的对象进行注入。
总的来说,@Autowired和@Resource都可以用来进行依赖注入,@Autowired更为常用,但@Resource也有其特殊的用途。
相关问题
@autowired和@resource
@Autowired和@Resource都是用来在类中注入bean的注解。
@Autowired是Spring框架提供的注解,通过构造器、setter方法或者字段注入进行依赖注入。
@Resource是Java提供的注解,支持通过名称或者类型进行依赖注入。
两个注解的作用是类似的,但是在使用时有一些细微的差别。
@autowired和@resource优劣
@autowired和@Resource都是用来进行依赖注入的注解,但它们有一些不同之处。
@autowired是Spring提供的注解,它会自动将bean注入到属性、构造函数或方法中。@autowired可以根据类型来自动匹配注入的bean,也可以通过@Qualifier注解指定需要注入的bean的名称。@autowired可以用在属性、Setter方法、构造方法和方法参数上。
@Resource是Java EE提供的注解,它也可以进行依赖注入。@Resource可以根据名称或类型来注入bean,如果同时指定了名称和类型,那么名称会优先生效。@Resource只能用在属性和Setter方法上。
优劣比较:
1. @autowired更方便,可以自动匹配需要注入的bean,而@Resource需要手动指定名称或类型。
2. @autowired只能用在Spring容器中,而@Resource可以用在任何Java EE容器中。
3. 如果需要进行类型转换,@autowired需要使用@Qualifier注解或者自定义类型转换器,而@Resource可以使用类型转换器。
4. @autowired可以用在构造方法和方法参数上,而@Resource只能用在属性和Setter方法上。
5. @Resource是Java EE规范中的注解,更加标准,而@Autowired是Spring提供的注解,更加专用。
总的来说,@autowired在Spring环境下更加常用和方便,而@Resource在Java EE环境下更加广泛使用。但是,它们本质上都是用来进行依赖注入的,选择哪个注解主要取决于具体的使用场景和个人喜好。