Cannot resolve symbol 'Resource'

发布时间 2023-12-13 22:58:01作者: tothk

扩展JSR-250注解@Resource

  • 理解JSR系列注解

    JSR(Java Specification Requests)是Java平台标准化进程中的一种技术规范,而JSR注解是其中一部分重要的内容。按照JSR的分类以及注解语义的不同,可以将JSR注解分为不同的系列,主要有以下几个系列:

    1. JSR-175: 这个JSR是Java SE 5引入的,是Java注解最早的规范化版本,Java SE 5后的版本中都包含该JSR中定义的注解。主要包括以下几种标准注解:
    • @Deprecated: 标识一个程序元素(如类、方法或字段)已过时,并且在将来的版本中可能会被删除。
    • @Override: 标识一个方法重写了父类中的方法。
    • @SuppressWarnings: 抑制编译时产生的警告消息。
    • @SafeVarargs: 标识一个有安全性警告的可变参数方法。
    • @FunctionalInterface: 标识一个接口只有一个抽象方法,可以作为lambda表达式的目标。
    1. JSR-250: 这个JSR主要用于在Java EE 5中定义一些支持注解。该JSR主要定义了一些用于进行对象管理的注解,包括:
    • @Resource: 标识一个需要注入的资源,是实现Java EE组件之间依赖关系的一种方式。
    • @PostConstruct: 标识一个方法作为初始化方法。
    • @PreDestroy: 标识一个方法作为销毁方法。
    • @Resource.AuthenticationType: 标识注入的资源的身份验证类型。
    • @Resource.AuthenticationType: 标识注入的资源的默认名称。
    1. JSR-269: 这个JSR主要是Java SE 6中引入的一种支持编译时元数据处理的框架,即使用注解来处理Java源文件。该JSR定义了一些可以用注解标记的注解处理器,用于生成一些元数据,常用的注解有:
    • @SupportedAnnotationTypes: 标识注解处理器所处理的注解类型。
    • @SupportedSourceVersion: 标识注解处理器支持的Java源码版本。
    1. JSR-330: 该JSR主要为Java应用程序定义了一个依赖注入的标准,即Java依赖注入标准(javax.inject)。在此规范中定义了多种注解,包括:
    • @Named: 标识一个被依赖注入的组件的名称。
    • @Inject: 标识一个需要被注入的依赖组件。
    • @Singleton: 标识一个组件的生命周期只有一个唯一的实例。
    1. 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