Autowired和Resource关键字的区别
时间: 2023-05-30 16:02:24 浏览: 122
@Autowired和@Resource都是用于注入依赖的关键字,但是它们有以下区别:
1. 来源不同:@Autowired是Spring提供的,而@Resource是Java EE提供的。
2. 注入方式不同:@Autowired默认按类型注入,如果有多个同类型的依赖,可以通过@Qualifier指定具体依赖;@Resource默认按名称注入,如果没有指定名称,则使用属性名作为依赖名称。
3. 可使用范围不同:@Autowired可以注入任何Spring管理的Bean,包括Controller、Service、DAO等;@Resource只能注入Java EE标准的Bean,包括EJB、Servlet、Web Service等。
4. 对Null值的处理不同:@Autowired允许注入Null值,而@Resource不允许。
相关问题
autowired引入的bean作用域
### 关于 `@Autowired` 注解引入的 Bean 的作用域
在 Spring 框架中,`@Autowired` 是用于自动装配依赖项的关键字。当提到 Bean 的作用域时,这决定了容器如何管理和创建这些 Beans 实例。
默认情况下,Spring 容器中的所有 Singleton-scoped beans 都是单例模式下的实例化对象[^2]。这意味着在整个应用程序上下文中只会存在一个共享的 Bean 实例,并且所有对这个特定 Bean 类型的请求都将返回相同的实例。对于使用 `@Autowired` 自动注入的情况,默认也是遵循这一原则:
```java
@Controller
public class UserController2 {
@Resource // 或者使用 @Autowired
private User user;
public void printUser2(){
System.out.println("user -> " + user);
// 单例模式下, 这里的 user 对象在整个应用生命周期内保持一致.
}
}
```
如果希望改变这种行为并定义其他类型的作用域,则可以通过设置相应的属性来完成。例如,Prototype Scope 表明每次获取该类型的 Bean 时都会新创建一个新的实例;Request/Session Scopes 主要应用于 Web 应用程序环境之中,分别表示针对每一次 HTTP 请求或会话期间有效的新建 Bean 实例。
需要注意的是,在实际开发过程中应当谨慎选择合适的 Bean 作用域以确保系统的性能和线程安全性[^3]。
什么叫做自动装配,自动装配相关的关键字有哪些
自动装配是指Spring框架在创建Bean时,自动地为Bean的属性设置对应的值,而不需要手动进行显式的配置。自动装配可以大大简化Spring应用程序的配置过程,提高开发效率。
自动装配相关的关键字有:
1. @Autowired:通过类型自动装配Bean的属性或构造函数参数。
2. @Qualifier:结合@Autowired使用,通过Bean的名称指定要装配的Bean。
3. @Resource:通过名称或类型自动装配Bean的属性或构造函数参数。
4. @Inject:和@Autowired功能类似,但是它是JavaEE6标准中定义的注解。
5. @ComponentScan:用于扫描指定包及其子包中的组件,并自动创建Bean。
6. @Configuration:用于声明一个类为配置类,类中的@Bean方法用于创建Bean。
7. @Bean:用于声明一个方法返回一个Bean实例。
8. @Value:用于将配置文件中的值注入到Bean属性中。
阅读全文