扩展JSR-250注解@Resource
-
理解JSR系列注解
JSR(Java Specification Requests)是Java平台标准化进程中的一种技术规范,而JSR注解是其中一部分重要的内容。按照JSR的分类以及注解语义的不同,可以将JSR注解分为不同的系列,主要有以下几个系列:
- JSR-175: 这个JSR是Java SE 5引入的,是Java注解最早的规范化版本,Java SE 5后的版本中都包含该JSR中定义的注解。主要包括以下几种标准注解:
@Deprecated
: 标识一个程序元素(如类、方法或字段)已过时,并且在将来的版本中可能会被删除。@Override
: 标识一个方法重写了父类中的方法。@SuppressWarnings
: 抑制编译时产生的警告消息。@SafeVarargs
: 标识一个有安全性警告的可变参数方法。@FunctionalInterface
: 标识一个接口只有一个抽象方法,可以作为lambda表达式的目标。
- JSR-250: 这个JSR主要用于在Java EE 5中定义一些支持注解。该JSR主要定义了一些用于进行对象管理的注解,包括:
@Resource
: 标识一个需要注入的资源,是实现Java EE组件之间依赖关系的一种方式。@PostConstruct
: 标识一个方法作为初始化方法。@PreDestroy
: 标识一个方法作为销毁方法。@Resource.AuthenticationType
: 标识注入的资源的身份验证类型。@Resource.AuthenticationType
: 标识注入的资源的默认名称。
- JSR-269: 这个JSR主要是Java SE 6中引入的一种支持编译时元数据处理的框架,即使用注解来处理Java源文件。该JSR定义了一些可以用注解标记的注解处理器,用于生成一些元数据,常用的注解有:
@SupportedAnnotationTypes
: 标识注解处理器所处理的注解类型。@SupportedSourceVersion
: 标识注解处理器支持的Java源码版本。
- JSR-330: 该JSR主要为Java应用程序定义了一个依赖注入的标准,即Java依赖注入标准(javax.inject)。在此规范中定义了多种注解,包括:
@Named
: 标识一个被依赖注入的组件的名称。@Inject
: 标识一个需要被注入的依赖组件。@Singleton
: 标识一个组件的生命周期只有一个唯一的实例。
- JSR-250: 这个JSR主要是Java EE 5中定义一些支持注解。该JSR包含了一些支持注解,可以用于对Java EE组件进行管理,包括:
@RolesAllowed
: 标识授权角色@PermitAll
: 标识一个活动无需进行身份验证。@DenyAll
: 标识不提供针对该方法的访问控制。@DeclareRoles
: 声明安全角色。
但是你要理解JSR是Java提供的技术规范,也就是说,他只是规定了注解和注解的含义,JSR并不是直接提供特定的实现,而是提供标准和指导方针,由第三方框架(Spring)和库来实现和提供对应的功能。
-
JSR-250 @Resource注解
@Resource注解也可以完成属性注入。那它和@Autowired注解有什么区别?
- @Resource注解是JDK扩展包中的,也就是说属于JDK的一部分。所以该注解是标准注解,更加具有通用性。(JSR-250标准中制定的注解类型。JSR是Java规范提案。)
- @Autowired注解是Spring框架自己的。
- @Resource注解默认根据Bean名称装配,未指定name时,使用属性名作为name。通过name找不到的话会自动启动通过类型装配。
- @Autowired注解默认根据类型装配,如果想根据名称装配,需要配合@Qualifier注解一起用。
- @Resource注解用在属性上、setter方法上。
- @Autowired注解用在属性上、setter方法上、构造方法上、构造方法参数上。
@Resource注解属于JDK扩展包,所以不在JDK当中,需要额外引入以下依赖:【高于JDK11或低于JDK8需要引入以下依赖】
<dependency> <groupId>jakarta.annotation</groupId> <artifactId>jakarta.annotation-api</artifactId> <version>2.1.1</version> </dependency>
来源:https://www.bilibili.com/video/BV1AP411s7D7/
最后编辑时间:2023年12月13日22:53:24
- Resource resolve Cannot symbol 39resource resolve cannot symbol 39 jsonobject resolve cannot resolve cannot mapper symbol cannot symbol问题slf4j filenotfoundexception resource because cannot resolve项目cannot问题 xxx resource cannot class resolve cannot maven jmxri 解决方案resolve方案cannot vue-resource 39 resource resolve