1. 程式人生 > >java 自定義註解注入父類屬性值

java 自定義註解注入父類屬性值

有這樣的需求其實我也挺奇葩的,不過也合理,先說說現實情況:

  1. 正在開發一個 Java 後臺專案
  2. 基於用 SSM 框架改造
  3. 不想重複寫這麼多程式碼
  4. 搞了個基類
  5. 基類中基本的增刪改查都有,繼承下來就行了 <( ̄▽ ̄)/
  6. 那麼問題來了
  7. 基類中需要拿到繼承他的子類的資訊,例如返回的檢視路徑啊,編輯資料時需要表名和 id 啊
  8. 以前 SSM 專案用配置檔案,可以配置 bean 的時候注入屬性
  9. 那麼現在呢?
  10. 毛線啊!!!不行啊!現在都用註解啦~~(ノಠ益ಠ)ノ彡┻━┻
  11. 不過 Java 大法好啊,有註解反射 balabala ~ (ˉ▽ ̄~) 切~~

於是就試試了,來來來,碼上見:

註解類:

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * @author 艾小天 
 * @email :[email protected]
 * @date :2017年12月11日 下午7:58:43
 * 用於 controller 子類為父類的屬性注入值
 */
@Retention(RUNTIME) @Target(TYPE) public @interface SuperController { /** * 檢視路徑 */ String viewPath() default ""; /** * 表名 */ String tableName() default ""; /** * 主鍵名稱 */ String primaryKey() default "ID"; }

父類:

import com.wb.base.annotations.SuperController;

/**
 * @author
艾小天 * @email :[email protected] * @date :2017年12月11日 下午7:55:18 * */
public class ParentController { private String viewPath;//檢視路徑 private String tableName;//表名 private String primaryKey;//主鍵名稱 protected ParentController() { SuperController sc = getClass().getAnnotation(SuperController.class); if (sc != null) { tableName = sc.tableName(); viewPath = sc.viewPath(); primaryKey = sc.primaryKey(); } } //這裡就可以做各種 CRUD 操作啦!~( ̄▽ ̄~)(~ ̄▽ ̄)~ protected void getDomain(String domainID) { System.out.println("這是domainID:" + domainID); System.out.println("這是viewPath:" + viewPath); System.out.println("這是tableName:" + tableName); System.out.println("這是primaryKey:" + primaryKey); } }

子類:

import com.wb.base.annotations.SuperController;

/**
 * @author 艾小天 
 * @email :[email protected]
 * @date :2017年12月11日 下午7:59:43
 * 
 */
@SuperController(tableName = "my_table", primaryKey = "my_id", viewPath = "hello/world/")
public class ChildController extends ParentController {

}

測試類:

/**
 * @author 艾小天 
 * @email :[email protected]
 * @date :2017年12月11日 下午8:01:21
 * 
 */
public class Test {

    public static void main(String[] args) {
        new ChildController().getDomain("66666");
    }

}

輸出結果:

這是domainID:66666
這是viewPath:hello/world/
這是tableName:my_table
這是primaryKey:my_id

其實這並不算什麼技術,頂多算是技巧,而且除了上面的方法還可以在子類裡面做文章
例如下面的方法也行,不過有程式碼潔癖啊~~~,所以就選用自定義註解了,
如果有更好的方法請賜教啊~,好,收工~ヾ( ̄▽ ̄)Bye~Bye~

public ChildController() {
    super.viewPath = "hello/world/";
    super.tableName = "my_table";
    super.primaryKey = "my_id";
}

或者:

@Autowired
public void setting() {
    super.viewPath = "hello/world/";
    super.tableName = "my_table";
    super.primaryKey = "my_id";
}

相關推薦

java 定義註解注入屬性

有這樣的需求其實我也挺奇葩的,不過也合理,先說說現實情況: 正在開發一個 Java 後臺專案 基於用 SSM 框架改造 不想重複寫這麼多程式碼 搞了個基類 基類中基本的增刪改查都有,繼承下來

Java 定義註解&通過反射獲取、方法、屬性上的註解

反射 JAVA中的反射是執行中的程式檢查自己和軟體執行環境的能力,它可以根據它發現的進行改變。通俗的講就是反射可以在執行時根據指定的類名獲得類的資訊。   註解的定義 註解通過 @interface 關鍵字進行定義。 /** * 自定義註解 *

java定義註解1】java定義註解-屬性

        關於自定義註解,以前專案種應用的不多,最近看新專案過程中發現了挺多自定義註解相關內容,使用起來比較巧妙,於是 總結了兩種方式,記錄如下:         第一種:結合反射進行屬性注入,程式碼如下:

java 定義註解驗證 (僅限於實體屬性上的註解

資源下載地址:http://download.csdn.net/detail/weilai_zhilu/9761533   該驗證主要包含三部分 註解驗證類 註解處理方法類 實體類 測試類 第一部分:註解驗證類(此部分暫時只寫了三個驗證類) 下面

Java使用反射、定義註解注入物件

自己寫的一個小例子,記錄一下。 package com.lxq.annotationAndreflection; public class Person { String name="default"; Integer age=0; public Person(

Java定義註解反射校驗數據

sda new out 格式 是否 本地 imp 使用範圍 數據類型 package com.annotations.ecargo; import java.lang.annotation.ElementType; import java.lang.annotati

java定義註解

不包含 doc 1.2 color 子類 局部變量 ati 包含 ant Java註解是附加在代碼中的一些元信息,用於一些工具在編譯、運行時進行解析和使用,起到說明、配置的功能。註解不會也不能影響代碼的實際邏輯,僅僅起到輔助性的作用。包含在 java.lang.annot

java 定義註解

tar 基本用法 而且 最簡 ida outline plain 現在 傳播 參考鏈接:https://blog.csdn.net/hbzyaxiu520/article/details/6212969 JAVA自定義註釋(Target,Retention,Document

Java定義註解之元註解(meta-annotation)Target、Retention、Documented、Inherited介紹

元註解:   元註解的作用就是負責註解其他(如:自定義)註解,用來對其它 annotation型別作說明。Java定義了4個標準的meta-annotation型別:    [email protected]    [email protected

java定義註解2】java定義註解結合Spring AOP

      承接上一篇,註解應用於屬性,本篇定義了一個用於方法的註解,結合Spring AOP 實現 切面程式設計。       以下demo演示使用了SpringBoot,與SSM中使用方式大致相同,效果如下: 1、自定義註解(用

java定義註解解析及相關場景實現

註解(Annotation)是java1.5之後提供的一種語法。其主要作用是編譯檢查(比如@override)和程式碼分析(通過程式碼中添加註解,利用註解解析器對添加了註解的程式碼進行分析,獲取想要的結果,一般自定義的註解都是這一種功能)。 1.1 JDK提供的註解 JDK提供的

利用List的sort方法,定義比較器對屬性進行排序

JDK1.8之後,List新增了sort方法,使用Comparator作為引數,呼叫者可自定義比較規則。 User user1 = new User(12, "張三"); User use

java定義註解在service層不生效原因

在做對資料加redis快取時,我這面採用了Spring-Aop的方式通過切面將資料存放在redis中,但是業務場景是,當前端呼叫了controller層的介面時,會走一些簽名校驗,如果校驗過了才會真正呼叫service層去取資料,所以我自己定義的註解載入controlle

java定義註解學習(一)_demo小練習

自定義註解 現在大家開發過程中,經常會用到註解。 比如@Controller 等等,但是有時候也會碰到自定義註解,在開發中公司的記錄日誌就用到了自定義註解。身為渣渣猿還是有必要學習下自定義註解的。 這篇我們先寫一個簡單的註解列子,不會立馬介紹各種什麼元註解。從例子中感受下註解的作用 定義個註解 packa

java定義註解學習(二)_註解詳解

上篇文章,我們簡單的實現了一個自定義註解,相信大家對自定義註解有了個簡單的認識,這篇,這樣介紹下註解中的元註解和內值註解 整體圖示 內建註解 @Override 重寫覆蓋 這個註解大家應該經常用到,主要在子類重寫父類的方法,比如toString()方法 package com.kevin.demo;

java定義註解學習(三)_註解解析及應用

上篇文章已經介紹了註解的基本構成資訊。這篇文章,主要介紹註解的解析。畢竟你只聲明瞭註解,是沒有用的。需要進行解析。主要就是利用反射機制在執行時進行檢視和利用這些資訊 常用方法彙總 在Class、Field、Method、Constructor中都有如下方法: //獲取所有的註解 public Annota

java定義註解-生成sql語句

一、自定義Table註解@Target(value=ElementType.TYPE)//使用在類或介面上 @Retention(value=RetentionPolicy.RUNTIME)//在執行期間可以獲取 @Documented//文件含有該註解 public @in

java定義註解、mybatis 外掛 實現資料庫 分庫分表

一、自定義註解實現分庫 為什麼會有資料庫切庫一說 首先,許多專案都有主庫與從庫,有的主庫後面甚至會有很多個從庫,主從庫之間的通常同步也很快,這為資料庫切庫提供了一個基礎,因為可以去不同的資料庫查詢,得到相同的結果(如果不同的資料庫是完全不同的,這個不在我們這篇文章討論的範圍之內,那個屬於讓專

資料脫敏——基於Java定義註解實現日誌欄位脫敏

  上文說了資料過敏主要有兩個思路:第一個就是在序列化實體之前先把需要脫敏的欄位進行處理,之後正常序列化;第二個就是在實體序列化的時候,對要脫敏的欄位進行處理。 脫敏實現思路   這裡探討第一種方法,用基於自定義註解的方式實現日誌脫敏。   要對

JAVA定義註解的使用和定義

 最近有所瞭解到自定義註解的應用,因此學習了一下,在專案後臺介面開發中,資料的傳輸經常有對資料內容格式及一些資訊規則的校驗,應用註解在資料進入後臺的開始使用自定義註解是一種比較可靠的方案。 一、註解的概念及分類        1.首先我們來看一下什麼是註解: