[Day - 11] - Spring 注入式之Resource原理与开发

Abstract

在第八天我们已得知既有的Autowird与Qualifier等常用的注入方式,今天这章节会介绍一个较少人使用的@Resource注入方式,@Resource注解与@Autowired差别在哪呢?@Resource整合了@Autowird与@Qualifier两项注解之一的功能,故除了可以自动注入获取所需的各类元件(@Component),亦可注入JNDI(Java Naming and Directory Interface)此种应用程序程序设计介面,故此项注解整合了相当多以往开发者所需的资源注入方式,可提供给开发者做参考使用

Principle Introduction

资源注解(@Resource Annotation)大部分所有核心工作都在ConfigurationClassParser此类别元件完成,此阶段会经由多个类别进行逻辑分析与转导取得相关属性资源,分为两项属性资源,第一类型,一般元件资源,如服务(@Service)、元件(@Component)或仓储库(@Repository)资源,皆透过ResourcePropertySource此类别元件取得相关Bean的属性资源,第二种类型,透过JndiPropertySource类别元件取得JNDI属性资源,当取得对应的属性资源後即可注入对应方法(Method)、类别(Class)、宣告参数(Field),透过以下简单范例示范如何取得元件提供各位开发者作参考。

配置一个简单的模组组件(bean)

@Configuration
public class BeanConfig {


    @Bean("MyLove")
    public MovieCandidate getMovieWedding() {
      .....
      .....
      .....
     
    }

透过资源注解自动注入

public class MovieCandidateTestSuite extends ServiceTestBase {

    @Resource(name="MyLove",description="Get bean by beanName")
    MovieCandidate myLove;
    
    
    @Test
    public void testCandidateForMyLove() {
        assertEquals(myLove.getName(),"My Love");
        assertEquals(myLove.getLang(), LanguageEunm.CN);
        System.out.println("Get My Love Bean from Resource verify success");
    }
}

透过简单的范例,我们可以看到资源注解(@Resource)相当方便,亦可提供叙述栏位给开发者提醒相关合作夥伴此元件为何种类型、用途为何,也整合了多种资源可注入开发者所需环境。

Structure

在Resource注解中,我们可以看到这(如图一所示)可适用任何一种介面、类别、方法及宣告栏位类别等之上的注入式模式注解,亦可透过多资源注解(Resources)中,一次性的注入多项元件进行对应您的元件,已有相当大的弹性进行各项资源对应,提供的多项方法提供开发者进行操作使用,name及type用来获取相对应的元件类别,AuthenticationType用来判定是使用何种类型元件进行驱动,如:Application为可能透过DriverManager 去取得 connection,没有透过JVM相关容器元件,反之,一般来说类别元件都是透过BeanFactory容器进行获取相关容器元件,而JNDI则是透过lookup及mappedName两项方法进行取得,以便取得外部相关配置好之资源,此注解亦进一步提供shareable方法,强调此元件是否提供共用,最後再提供description来给开发者叙述元件所代表的功能与意义,如图二所示,若未指定名称(Name)会用预设名称进行寻找指定元件,若寻找不到会退回装配元件,若指定装配名称,必依照指定名称进行配置,开发者可依照此架个近行评估。

image
图一 @Resource structure

image
图二 @Resource 装配流程

Follow up

Run test task

gradle test

Run open result html

open ./build/reports/tests/test/index.html

Test Report

Resource injection test
image

Mind-blowing test detail
image

Sample Source

spring-resource-sample

Reference Url

tabnine-Resource.name

tabnine-Resource.lookup

Other possible extensions to Java annotations

@Resource 资源取得 JNDI 的相关资源

Spring中注解的实现原理-Autowired和Resource的区别


<<:  [第11天]理财达人Mx. Ada-借券查询

>>:  Proxmox VE 虚拟机复制与范本

Day30 ATT&CK for ICS - Inhibit Response Function(2)

T0804 Block Reporting Message 攻击者尝试阻止回报封包,这些封包内容可能...

Day10-"一维阵列"

阵列依据占用空间的大小及编号方式,可分为一维阵列、二维阵列,且必须经过宣告才可使用。 C语言的阵列索...

Day 12 Swift语法-进阶篇(5/5)-Extension

昨天提到了protocol,今天我们就学习一下extenison的用法,昨天我们可以透协定去规范我们...

基础的Git上传方法与指令

1.以下程序码中有中文的,一律要更换成自己要的名字 2.程序码中有许多空格,请务必注意不要漏掉!! ...

【Day14】特殊性营运流程篇-POS

#odoo #开源系统 #数位赋能 #E化自主 消费者来到实体商店消费,在与熟识的服务人员闲聊过程中...