1. 程式人生 > >使用Spring AOP結合自定義Java註解實現動態資料來源設定

使用Spring AOP結合自定義Java註解實現動態資料來源設定

1、定義Java註解

@Retention(RetentionPolicy.RUNTIME)
// 註解將要寫到型別(Class/Interface)還是其它元素(Method等)上,支援package、type、method、field等,一般只會配置一個
@Target({ElementType.TYPE}) public @interface DataSource { String value();}
2、定義切點

(1)定義一個空方法

(2)使用@Piontcut標註,填入切點表示式

(3)示例

    @Pointcut("execution (* com.rrfare.dao.*.* (..))")   // 在執行com.rrfare.dao下面所有型別的所有方法時生效!
    public void dataOperationCut(){};

    @Before("dataOperationCut()")
    public void doBefore(JoinPoint jp) {
        // doSomething
    }
(4)切點表示式(@Pointcut後面括號內的內容)的有效格式
         execution:用於匹配方法執行的連線點;

         within:用於匹配指定型別內的方法執行;

         this:用於匹配當前AOP代理物件型別的執行方法;注意是AOP代理物件的型別匹配,這樣就可能包括引入介面也型別匹配;

         target:用於匹配當前目標物件型別的執行方法;注意是目標物件的型別匹配,這樣就不包括引入介面也型別匹配;

         args:用於匹配當前執行的方法傳入的引數為指定型別的執行方法;

         @within:用於匹配所以持有指定註解型別內的方法;

         @target:用於匹配當前目標物件型別的執行方法,其中目標物件持有指定的註解;

         @args:用於匹配當前執行的方法傳入的引數持有指定註解的執行;

         @annotation:用於匹配當前執行方法持有指定註解的方法;

         bean:Spring AOP擴充套件的,AspectJ沒有對於指示符,用於匹配特定名稱的Bean物件的執行方法;

         reference pointcut:表示引用其他命名切入點,只有@ApectJ風格支援,Schema風格不支援

3、第1步和第2步沒有任何關係

4、動態資料來源的實現思路

(1)Spring提供了Dynamic DataSource機制

(2)在需要切換資料來源的位置(Class、Interface、Method等的上面)定義Java註解

(3)使用AOP對以上位置進行攔截,並解析出Java註解,根據具體值來動態設定資料來源

相關推薦

使用Spring AOP結合定義Java註解實現動態資料來源設定

1、定義Java註解 @Retention(RetentionPolicy.RUNTIME) // 註解將要寫到型別(Class/Interface)還是其它元素(Method等)上,支援package、type、method、field等,一般只會配置一個@Target

Spring AOP 結合定義註解的使用

for img support bsp parser disco get asp src 例如要實現一個評論內容的攔截 1,聲明自定義註解,這裏的key()為要攔截的方法中的方法體對應的變量名,可以參考第3點. 2,創建一個切面類,@annatation()中的co

Java註解及通過定義Java註解實現資料庫的操作

在Java程式中通過註解,可以讓程式設計更加簡潔、程式碼更加清晰。因此在Java框架程式碼中,嵌入了大量的註解。 講註解,首先得講註解的概念:Java提供了一種原程式中的元素關聯任何資訊和任何元資料的途徑和方法。 一、註解的分類 1、按照執行機制分為原始碼註解、編譯註解和執

spring aop攔截定義註解的切入點表示式

@within(com.cxh.study.aop.controller.UserAccessAnnotation) 表示攔截含有com.cxh.study.aop.controller.UserAccessAnnotation這個註解的類中所有方法 @an

定義Java註解(annotation)

https://www.imooc.com/learn/456  筆記 Java從1.5開始引進註解。 首先解決一個問題,為什麼要學習Java註解? 1.看懂別人寫的程式碼,尤其是框架的程式碼 2.可以是自己寫的程式碼簡潔清晰   現在開始學習Java註解了。  

定義Json註解實現輸出日誌欄位脫敏

背景: 在日誌輸出的時候,有時會輸出一些使用者的敏感資訊,如手機號,身份證號,銀行卡號等,現需要對這些資訊在日誌輸出的時候進行脫敏處理 思路: 使用fastjson的ValueFilter對帶有自定義註解的欄位進行過濾 /** * 敏感資訊型別 * * @auth

分享:定義JAVA註解

http ack 信息 element 常量 變量 分享 oca runt   元註解   元註解指用來定義註解的註解,例如:@Retention @Target Inherited @Documented等等。最為重要和經常使用的是@Retention @Target。

Springboot中利用aop註解實現動態資料來源

本篇文章將介紹如何使用AOP和註解來實現動態資料來源. 使用ThreadLocal儲存當前執行緒使用的資料來源的key import org.slf4j.Logger; import org.slf4j.LoggerFactory; /**

17、類的定義屬性訪問及動態屬性設定

前言:本文主要介紹python類的一些自定義屬性訪問的方法,以及類的動態屬性設定即python的內建函式setattr()。 自定義屬性訪問 什麼是屬性?下面的例子a和b是屬性嗎?不是,他們是全域性變數,屬性(attribute)是類中的成員變數,也可以理解為屬性就是類變數。 a = 11234 b =

Spring Boot中定義註解+AOP實現主備庫切換

摘要: 本篇文章的場景是做排程中心和監控中心時的需求,後端使用TDDL實現分表分庫,需求:實現關鍵業務的查詢監控,當用Mybatis查詢資料時需要從主庫切換到備庫或者直接連到備庫上查詢,從而減小主庫的壓力,在本篇文章中主要記錄在Spring Boot中通過自定義註解結合AOP實現直接連線備庫查詢。 一.通過A

Spring Boot系列——AOP定義註解的最佳實踐

AOP(Aspect Oriented Programming),即面向切面程式設計,是Spring框架的大殺器之一。 首先,我宣告下,我不是來系統介紹什麼是AOP,更不是照本宣科講解什麼是連線點、切面、通知和切入點這些讓人頭皮發麻的概念。 今天就來說說AOP的一些應用場景以及如何通過和其他特性的結合提升

spring boot通過定義註解AOP攔截指定的請求

本文主要通過切面類和自定註解的方式,攔截指定的介面(程式碼中已經作了詳細的說明) 目錄 一 準備工作 三 切面類 五 測試結果  一 準備工作 1.1 新增依賴 通過spr

AOP定義註解實現redis註解快取

  很早之前學習了redis,在這次畢業設計中使用redis對熱點資料進行快取,其中使用spring-data-redis還有@Cacheable、@CachePut和@CacheEvict這3個註解。註解的方式避免了在業務方法中參雜太多非業務的邏輯程式碼,比如日誌和事務,

使用Spring Boot的AOP處理定義註解

前言 上一篇文章Java 註解介紹講解了下Java註解的基本使用方式,並且通過自定義註解實現了一個簡單的測試工具;本篇文章將介紹如何使用Spring Boot的AOP來簡化處理自定義註解,並將通過實現一個簡單的方法執行時間統計工具為樣例來講解這些內容。

Spring-AOP基於JAVA註解實現

1.選擇切面切點或者連線點 定義一個需要切面的介面 //Spring-AOP程式設計是基於方法的切面程式設計,及只能在方法前後進行切面程式設計 //現在就對下面這個介面中的方法進行切面程式設計 public interface Performance{

Java實現定義註解處理器(Annotation Processor)

在之前的《簡單實現ButterKnife的註解功能》中,使用了執行時的註解實現了通過編寫註解繫結View與xml。由於執行時註解需要在Activity初始化中進行繫結操作,呼叫了大量反射相關程式碼,在介面複雜的情況下,使用這種方法就會嚴重影響Activity初始

定義註解(二)日誌輸出:定義日誌註解+AOP實現

自定義日誌標籤YfLog 日誌註解:以日誌自定義註解+AOP實現 ####1、引入AOP Maven依賴 <!--springBoot 的aop--> <dependency> <groupId>org.springf

定義 Java Annotation ,讀取註解

sta tools stp exc num value mage test lang 1. 首先是自定義註解: Java代碼 package cn.veji.hibernate.po; import java.lang.annot

spring boot 定義Validator註解

pack oot info 周期 pac tps var 虛擬 mage spring boot在Post接受一個對象參數的時候可以使用@Valid去驗證,如下代碼 在創建一個User類 上面的@NotBlank和@Past就做了一個判斷,如何做類似的註解用來驗證數據

spring 定義標籤的實現

在我們進行Spring 框架開發中,估計用到最多的就是bean 標籤吧,其實在Spring中像<mvc/><context/>這類標籤以及在dubbo配置的標籤都是屬於自定義的標籤,標籤的解析,已經由作者就行了解析,我們用就好了,那麼我們今天就進行開發一個自己的標籤,模擬 &