Spring不但支持自己定义的@Autowired注解,还支持由JSR-250规范定义的几个注解,如:@Resource、
@PostConstruct及@PreDestroy。
1. @Autowired
@Autowired是Spring
提供的,需导入
Package:org.springframework.beans.factory.annotation.Autowired;
只按照byType
注入。
2. @Resource
@Resource默认按
byName
自动注入,是J2EE提供的,
需导入Package:
javax.annotation.Resource;
@Resource有两个中重要的属性:name和type
,而Spring将@Resource注解的name属性解析为bean的
名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用
type属性时则使用
byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用by
Name自动注入策略。
@Resource装配顺序
(1). 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常;
(2). 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常;
(3). 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常;
(4). 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一
个原始类型进行匹配,如果匹配则自动装配;
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入。
3. 使用区别
@Resource(name="loginService")
private LoginService loginService;
@Autowired(required=false)@Qualifier("loginService")
private LoginService loginService;
(1).@Autowired
与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上;
(2).@Autowired
默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设
置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合
@Qualifier注解进行使用;
(3).@Resource(这个注解属于J2EE的),默认安装名称进行装配,名称可以通过name属性进行指定,如果没
有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属
性名进行装配。当找不到与名称匹配的bean时才按照类型进行装
配。但是需要注意的是,如果name属性一旦指
定,就只会按照名称进行装配。
推荐使用@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与Spring
的耦合,这样代码看起就比较优雅
。
分享到:
相关推荐
Spring 注解@Resource 和@Autowired Spring 框架中提供了两个重要的注解,分别是@Resource 和@Autowired,它们都是用于 bean 的自动装配的。了解这两个注解的区别和使用场景是非常重要的。 首先,@Autowired 是 ...
8. **@Autowired与@Resource的区别** `@Autowired`主要基于类型匹配,而`@Resource`则优先基于名称匹配。`@Resource`是JSR-250规范的一部分,它的行为更接近于传统的J2EE资源注入。`@Autowired`提供了更灵活的依赖...
@Resource 是一个来自 J2EE 的注解,默认按照名称进行装配,名称可以通过 name 属性进行指定,如果没有指定 name 属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在 setter 方法上默认取属性名...
- **定义**:`@Resource`注解也是用于自动装配bean的,但它来自于J2EE标准,不仅可以在Spring框架中使用,还可以在其他支持JSR-250规范的容器中使用。 - **示例**: ```java @Resource(name = "beanName") ...
1. **@Resource注解的使用** `@Resource`注解由Java标准提供,最初是用于J2EE环境中的,但在Spring框架中被广泛使用。它的主要目的是通过名称来注入依赖,通常用于注入单例bean。例如: ```java public class ...
2. **定义业务逻辑类**:例如UserService,该类需要使用UserDAO进行业务操作,在UserService类中通过@Autowired或@Resource注解来注入UserDAO实例。 3. **配置文件中声明bean**:在beans.xml配置文件中声明...
通过@Autowired、@Resource、@Inject等注解,Spring容器会自动匹配并注入依赖。 3. **容器初始化**:Spring容器读取配置文件,创建并管理Bean实例,处理依赖注入。 4. **Bean的生命周期管理**:Spring容器负责Bean的...
- **@Resource**和**@Autowired**:分别用于依赖注入,前者基于J2EE标准,后者是Spring特有的,它们可以按照名称或类型自动装配Bean。 - **@Transactional**:用于声明式事务管理,可以指定回滚策略和隔离级别。 - *...
- `@Resource`:与`@Autowired`类似,但基于J2EE标准,按名称匹配。 - `@PathVariable`:获取URL模板变量。 - `@CookieValue`:获取Cookie值。 - `@RequestParam`:将请求参数绑定到方法参数。 - `@...
6. **@Resource/@Autowired**:分别用于J2EE和Spring框架中依赖注入。 7. **@Transactional**:用于事务管理。 8. **@ResponseBody**:用于将返回对象转化为JSON字符串,并写入HTTP响应体。 9. **@Scope**:用于指定...
Spring提供了多种注解,如`@Component`、`@Service`、`@Repository`和`@Controller`用于组件扫描,`@Autowired`实现自动装配,`@Qualifier`用于精确匹配依赖,`@Required`确保属性被注入等。 【Bean的生命周期和...
通过XML配置文件或注解(如@Autowired、@Resource等),Spring可以自动管理对象的创建和装配,使得代码更易于理解和维护。 2. **容器**:Spring框架包含两个主要容器——Bean Factory和ApplicationContext。Bean ...
- `@Resource` 与`@Autowired`类似,但默认通过bean的名称进行匹配,是J2EE标准的注解。 2. **线程创建**: - 创建线程主要有两种方式:继承`Thread`类并重写`run()`方法,或者实现`Runnable`接口并提供`run()`...
3.10. 以J2EE RAR文件的形式部署Spring ApplicationContext 3.11. 基于注解(Annotation-based)的配置 3.11.1. @Autowired 3.11.2. 基于注解的自动连接微调 3.11.3. CustomAutowireConfigurer 3.11.4. @...
3.10. 以J2EE RAR文件的形式部署Spring ApplicationContext 3.11. 基于注解(Annotation-based)的配置 3.11.1. @Autowired 3.11.2. 基于注解的自动连接微调 3.11.3. CustomAutowireConfigurer 3.11.4. @...