@Resource 注解
@Resource
注解来自于javax.annotation
包,通常用于Java EE和Jakarta EE环境,但也可以在Spring中使用。它的主要特性和使用注意点如下:
-
默认按名称注入:
@Resource
首先根据名称进行注入。如果名称匹配失败,再根据类型进行注入。- 你可以显式地指定名称,通过
name
属性,例如:@Resource(name = "dataSource")
。
-
JNDI支持:
@Resource
通常用于注入Java EE资源,比如数据源、JMS连接工厂等。
-
限定资源类型:
- 可以通过
type
属性限定要注入的资源类型,例如:@Resource(type = DataSource.class)
。
- 可以通过
@Autowired 注解
@Autowired
注解是Spring框架提供的,用于自动装配Spring管理的bean。它的主要特性和使用注意点如下:
-
默认按类型注入:
@Autowired
默认是根据类型进行注入。如果找到多个相同类型的bean,可以通过@Qualifier
进一步指定要注入的bean。
-
自动要求:
- 默认情况下,
@Autowired
会尝试自动装配。如果找不到匹配项,会抛出异常。可以通过设置required = false
属性使其成为可选自动装配。
- 默认情况下,
-
构造器、方法和字段:
- 可以用于构造器、方法和字段的自动注入。Spring还支持构造器注入,使得你可以在没有默认构造器的情况下进行自动装配。
注意
-
默认注入方式:
@Resource
默认根据名称进行注入,若按名称注入不成功才按类型注入。@Autowired
默认根据类型进行注入。
-
@Resource
注解通常用于标记依赖注入的字段或方法。在Jakarta EE环境中(原Java EE),@Resource
注解通常用于注入外部资源,比如数据源、EJB、JMS资源等。如果一个类的字段使用了
@Resource
注解,但类本身没有使用特定注解(如@Component
、@Service
、@ManagedBean
等),那么是否能够成功注入资源取决于以下几个因素: -
运行环境:你需要确保应用程序运行在支持注解解析和注入的容器中。例如,在Spring框架中运行时,Spring容器会扫描并处理所有标记了注释的类和它们的字段。
-
配置扫描:即使你的类没有显式地使用特定的注解,许多框架允许通过配置来扫描包路径,从而可以自动识别和处理注解。比如在Spring中,你可以使用
@ComponentScan
配置来指定包路径进行扫描。