国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【springMvc】自定義注解的使用方式

這篇具有很好參考價(jià)值的文章主要介紹了【springMvc】自定義注解的使用方式。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【springMvc】自定義注解的使用方式,java,idea,mvc,spring,springmvc

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 艷艷耶??:個(gè)人主頁

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 個(gè)人專欄 :《Spring與Mybatis集成整合》

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?生活的理想,為了不斷更新自己 !

【springMvc】自定義注解的使用方式,java,idea,mvc,spring,springmvc

1.前言

1.1.什么是注解

Annontation是Java5開始引入的新特征,中文名稱叫注解。

它提供了一種安全的類似注釋的機(jī)制,用來將任何的信息或元數(shù)據(jù)(metadata)程序元素(類、方法、成員變量等)進(jìn)行關(guān)聯(lián)。為程序的元素(類、方法、成員變量)加上更直觀、更明了的說明,這些說明信息是與程序的業(yè)務(wù)邏輯無關(guān),并且供指定的工具或框架使用。Annontation像一種修飾符一樣,應(yīng)用于包、類型、構(gòu)造方法、方法、成員變量、參數(shù)及本地變量的聲明語句中。

Java注解是附加在代碼中的一些元信息,用于一些工具在編譯、運(yùn)行時(shí)進(jìn)行解析和使用,起到說明、配置的功能。注解不會也不能影響代碼的實(shí)際邏輯,僅僅起到輔助性的作用。

1.2.注解的用處

  1. ?生成文檔。這是最常見的,也是java 最早提供的注解。常用的有@param @return 等
  2. 跟蹤代碼依賴性,實(shí)現(xiàn)替代配置文件功能。比如Dagger 2 依賴注入,未來java 開發(fā),將大量注解配置,具有很大用處;
  3. 在編譯時(shí)進(jìn)行格式檢查。如@override 放在方法前,如果你這個(gè)方法并不是覆蓋了超類方法,則編譯時(shí)就能檢查出。

?1.3.注解的原理

注解本質(zhì)是一個(gè)繼承了Annotation 的特殊接口,其具體實(shí)現(xiàn)類是Java 運(yùn)行時(shí)生成的動態(tài)代理類。而我們通過反射獲取注解時(shí),返回的是Java 運(yùn)行時(shí)生成的動態(tài)代理對象$Proxy1。通過代理對象調(diào)用自定義注解(接口)的方法,會最終調(diào)用AnnotationInvocationHandler 的invoke 方法。該方法會從memberValues 這個(gè)Map 中索引出對應(yīng)的值。而memberValues 的來源是Java 常量池。

2.注解的案列:

??2.1?案例一(獲取類與方法上的注解值)

? ? ? ? ????????定義一個(gè)類:

package com.sy.annotation.pi;

public enum  TranscationModel {
    Read, Write, ReadWrite    //定義三個(gè)實(shí)例,可以將它看作類

}

? ? ? ? ? ? ? ?寫三個(gè)注解:

package com.sy.annotation;

import java.lang.annotation.*;

/**
 * MyAnnotation1注解可以用在類、接口、屬性、方法上
 * 注解運(yùn)行期也保留
 * 不可繼承
 */
@Target({ElementType.TYPE, ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation1 {
    String name();
}
package com.sy.annotation;

import java.lang.annotation.*;

/**
 *  MyAnnotation2注解可以用在方法上
 *  注解運(yùn)行期也保留
 *  不可繼承
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation2 {
    TranscationModel model() default TranscationModel.ReadWrite;
}
package com.sy.annotation;

import java.lang.annotation.*;

/**
 * @author  shenyan
 *
 * MyAnnotation3注解可以用在方法上
 * 注解運(yùn)行期也保留
 * 可繼承
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface MyAnnotation3 {
    TranscationModel[] models() default TranscationModel.ReadWrite;
}

創(chuàng)建幾個(gè)方法使用這些注解

package com.sy.annotation.Demo1;

import com.sy.annotation.MyAnnotation1;
import com.sy.annotation.MyAnnotation2;
import com.sy.annotation.MyAnnotation3;
import com.sy.annotation.TranscationModel;

/**
 * @author shenyan
 *
 * 獲取類與方法上的注解值
 */
@MyAnnotation1(name = "艷艷耶")
public class Demo1 {

    @MyAnnotation1(name = "csdn")
    private Integer age;

    @MyAnnotation2(model = TranscationModel.Read)
    public void list() {
        System.out.println("list");
    }

    @MyAnnotation3(models = {TranscationModel.Read, TranscationModel.Write})
    public void edit() {
        System.out.println("edit");
    }
}

最后,進(jìn)行測試

【springMvc】自定義注解的使用方式,java,idea,mvc,spring,springmvc

【springMvc】自定義注解的使用方式,java,idea,mvc,spring,springmvc

【springMvc】自定義注解的使用方式,java,idea,mvc,spring,springmvc

?2.2??案例二(獲取類屬性上的注解屬性值,默認(rèn)值的賦予)

? ? ??? 自定義一個(gè)注解,并賦予默認(rèn)值:

package com.sy.annotation.Demo2;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author shenyan
 * /
//@Retention(RetentionPolicy.SOURCE)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface TestAnnotation {
    String value() default "默認(rèn)value值";

    String what() default "這里是默認(rèn)的what屬性對應(yīng)的值";
}

? 建立類測試:

? ? ? ? ? ? ??? 有些兩個(gè)值都賦予了,有些只賦予了一個(gè)

package com.sy.annotation.Demo2;

/**
 * @author shenyan
 *
 * 獲取類屬性上的注解屬性值
 */
public class Demo2 {
    @TestAnnotation(value = "這就是value對應(yīng)的值_msg1", what = "這就是what對應(yīng)的值_msg1")
    private static String msg1;

    @TestAnnotation("這就是value對應(yīng)的值1")
    private static String msg2;

    @TestAnnotation(value = "這就是value對應(yīng)的值2")
    private static String msg3;

    @TestAnnotation(what = "這就是what對應(yīng)的值")
    private static String msg4;
}

???測試結(jié)果:

【springMvc】自定義注解的使用方式,java,idea,mvc,spring,springmvc

【springMvc】自定義注解的使用方式,java,idea,mvc,spring,springmvc

?? 2.3??案例三(獲取參數(shù)修飾注解對應(yīng)的屬性值,非空注解)

? ? ? ? ? ? ? ??同樣,先建立一個(gè)非空注解

package com.sy.annotation;

import java.lang.annotation.*;

/**
 * @author shenyan
 *
 * 非空注解:使用在方法的參數(shù)上,false表示此參數(shù)可以為空,true不能為空
 */
@Documented
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface IsNotNull {
    boolean value() default false;
}

?建立方法,進(jìn)行測試:

package com.sy.annotation.Demo3;

import com.sy.annotation.IsNotNull;

/**
 * @author shenyan
 *
 * 獲取參數(shù)修飾注解對應(yīng)的屬性值
 */
public class Demo3 {

    public void hello1(@IsNotNull(true) String name) {
        System.out.println("hello:" + name);
    }

    public void hello2(@IsNotNull String name) {
        System.out.println("hello:" + name);
    }
}

測試類:

方法1:

【springMvc】自定義注解的使用方式,java,idea,mvc,spring,springmvc

方法2:

【springMvc】自定義注解的使用方式,java,idea,mvc,spring,springmvc

方法3:

【springMvc】自定義注解的使用方式,java,idea,mvc,spring,springmvc

3.AOP結(jié)合自定義注解案例

? ? ? ??配置相關(guān)AOP? pom文件

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

? ? ? ?applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--1. 注解式開發(fā) -->
    <!-- 注解驅(qū)動 -->
    <context:annotation-config/>
    <!-- 用注解方式注入bean,并指定查找范圍:com.javaxl.ssh2及子子孫孫包-->
    <context:component-scan base-package="com.zking"/>
    <!--開啟動態(tài)代理-->
    <aop:aspectj-autoproxy />
 
</beans>

?定義一個(gè)標(biāo)志日志的注解

package com.sy.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author shenyan
 */

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyLog {
    String desc();
}

再創(chuàng)建一個(gè)切面類?LogAspect,用于實(shí)現(xiàn)日志記錄的邏輯。

package com.sy.annotation.aop;

import com.sy.annotation.MyLog;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * @author shenyan
 */
@Component
@Aspect
public class MyLogAspect {
    private static final Logger logger = LoggerFactory.getLogger(MyLogAspect.class);

    /**
     * 只要用到了com.javaxl.p2.annotation.springAop.MyLog這個(gè)注解的,就是目標(biāo)類
     */
    @Pointcut("@annotation(com.sy.annotation.MyLog)")
    private void MyValid() {
    }

    @Before("MyValid()")
    public void before(JoinPoint joinPoint) {
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        logger.debug("[" + signature.getName() + " : start.....]");
        System.out.println("[" + signature.getName() + " : start.....]");

        MyLog myLog = signature.getMethod().getAnnotation(MyLog.class);
        logger.debug("【目標(biāo)對象方法被調(diào)用時(shí)候產(chǎn)生的日志,記錄到日志表中】:"+myLog.desc());
        System.out.println("【目標(biāo)對象方法被調(diào)用時(shí)候產(chǎn)生的日志,記錄到日志表中】:" + myLog.desc());
    }


}

在方法上運(yùn)用日志注解

package com.sy.annotation.aop;

import com.sy.annotation.MyLog;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author shenyan
 */
@Controller
public class LogController {

    @RequestMapping("/myLog")
    @MyLog(desc = "這是結(jié)合spring aop知識,講解自定義注解應(yīng)用的一個(gè)案例")
    public void testLogAspect(){
        System.out.println("這里隨便來點(diǎn)啥");
    }
}

運(yùn)行結(jié)果:?

【springMvc】自定義注解的使用方式,java,idea,mvc,spring,springmvc

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?今日分享結(jié)束!

【springMvc】自定義注解的使用方式,java,idea,mvc,spring,springmvc文章來源地址http://www.zghlxwxcb.cn/news/detail-732235.html

到了這里,關(guān)于【springMvc】自定義注解的使用方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring-mvc的參數(shù)傳遞與常用注解的解答及頁面的跳轉(zhuǎn)方式---綜合案例

    Spring-mvc的參數(shù)傳遞與常用注解的解答及頁面的跳轉(zhuǎn)方式---綜合案例

    目錄 一.slf4j--日志 二.常用注解 ??? ? ?2.1.@RequestMapping ??????2.2.@RequestParam ??????2.3.@RequestBody ??????2.4.@PathVariable 三.參數(shù)的傳遞 3.1 基礎(chǔ)類型 3.2 復(fù)雜類型 3.3?@RequestParam 3.4? @PathVariable 3.5 @RequestBody 3.6 增刪改查? 四.返回值? ????????? 4.1 void 返回值? ?4.2 String

    2024年02月09日
    瀏覽(28)
  • 【SpringMVC】自定義注解與AOP結(jié)合使用

    【SpringMVC】自定義注解與AOP結(jié)合使用

    目錄 一、SpringMVC之自定義注解 1.1 Java注解簡介 1.2 為什么要用注解 1.3 注解的分類 ? 1.3.1 JDK基本注解 1.3.2 JDK元注解? 1.3.3 自定義注解? 1.4 自定義注解三種使用案例 1.4.1?案例一(獲取類與方法上的注解值) 1.4.2?案例二(獲取類屬性上的注解屬性值) 1.4.3 案例三(獲取參數(shù)

    2024年02月07日
    瀏覽(27)
  • Spring基礎(chǔ)(Web-MVC)——在idea中新建springWeb項(xiàng)目 & 瀏覽器請求 和 服務(wù)器響應(yīng) & SpringMvc文件相關(guān)

    Spring基礎(chǔ)(Web-MVC)——在idea中新建springWeb項(xiàng)目 & 瀏覽器請求 和 服務(wù)器響應(yīng) & SpringMvc文件相關(guān)

    mvc是啥,springMvc是啥,如何搭建springWeb項(xiàng)目, 在springMvc下的request和response怎么發(fā)請求,怎么進(jìn)行響應(yīng)? springMvc處理文件相關(guān):上傳文件,uuid改名,靜態(tài)資源映射,yaml配置路徑,spring配置文件初步; 表現(xiàn)(視圖)層:WEB層,用來和客戶端進(jìn)行數(shù)據(jù)交互的。 servlet-controller 業(yè)務(wù)層

    2024年02月03日
    瀏覽(60)
  • Spring CORS 跨域使用與原理(@CrossOrigin注解,Java配置類方式,xml方式)

    出于安全原因,瀏覽器禁止AJAX調(diào)用當(dāng)前源之外的資源。 跨域資源共享(CORS)是由大多數(shù)瀏覽器實(shí)現(xiàn)的W3C規(guī)范,它允許您以一種靈活的方式指定授權(quán)哪種跨域請求,而不是使用一些不太安全、功能不太強(qiáng)大的hack(如IFrame或JSONP)。 Spring Framework 4.2 GA為CORS提供了一流的開箱即用支持

    2024年02月08日
    瀏覽(24)
  • 【Spring MVC】快速學(xué)習(xí)使用Spring MVC的注解及三層架構(gòu)

    【Spring MVC】快速學(xué)習(xí)使用Spring MVC的注解及三層架構(gòu)

    ?? 博客主頁:從零開始的-CodeNinja之路 ? 收錄文章:【Spring MVC】快速學(xué)習(xí)使用Spring MVC的注解及三層架構(gòu) ??歡迎大家點(diǎn)贊??評論??收藏?文章 SpringWebMVC是基于ServletAPI構(gòu)建的原始Web框架,從?開始就包含在Spring框架中。它的正式名稱“SpringWebMVC”來?其源模塊的名稱(Spri

    2024年04月17日
    瀏覽(93)
  • 三、使用注解形式開發(fā) Spring MVC程序

    1、 創(chuàng)建 maven 項(xiàng)目,添加框架支持 2、 添加依賴,因?yàn)?maven 可以有一些資源過濾的問題,這里直接將資源過濾配置補(bǔ)全 3、 檢查項(xiàng)目結(jié)構(gòu)中是否有 lib 夾以及 jar 是否成功導(dǎo)入了,并配置 tomcat 這里配置完基本上就不用在動了,統(tǒng)一使用注解來解決 @Controller: @Controller 用于標(biāo)

    2024年02月12日
    瀏覽(19)
  • Spring MVC:常用參數(shù)(注解)的使用和參數(shù)綁定的驗(yàn)證

    Spring MVC:常用參數(shù)(注解)的使用和參數(shù)綁定的驗(yàn)證

    Java EE企業(yè)級應(yīng)用開發(fā)教程(Spring+Spring MVC+MyBatis)(第2版) Spring MVC常用參數(shù) Spring MVC簡單應(yīng)用 Spring MVC參數(shù)綁定 本實(shí)驗(yàn)采用的是本地安裝的tomcat8.5.0版本 (1)創(chuàng)建maven 管理的java web工程 (2)添加本地tomcat war包 (3)實(shí)驗(yàn)過程 輸出Hello Word 訪問端口:http://localhost:8080/chapter1

    2024年02月04日
    瀏覽(21)
  • (第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄

    (第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄

    今天我們要來學(xué)習(xí)一下SSM框架的最后一個(gè)框架SpringMVC 一、初認(rèn)SpringMVC 基本概念: ? Spring MVC(Model-View-Controller)是一個(gè)用于構(gòu)建Java Web應(yīng)用程序的開源框架,它提供了一種基于MVC架構(gòu)的方式來開發(fā)Web應(yīng)用 。 ? SpringMVC是Spring Framework的一部分,它是一種基于模型-視圖-控制器(

    2024年02月07日
    瀏覽(56)
  • IDEA 使用 maven 搭建 spring mvc

    IDEA 使用 maven 搭建 spring mvc

    1.1 創(chuàng)建成功之后配置 Spring MVC 1.2 勾選 Spring MVC 2.1 更改web.xml配置 更改為 2.2 dispatcher-servlet.xml配置 注意 base-package 換成自己存放 Controller 包的路徑 2.3 pop.xml 安裝 spring-webmvc 然后點(diǎn)擊 Apply,即可。 右上角 run 跑一下。 訪問 /hello: 如果Tomcat 跑不起來,看看 Tomcat 控制臺是不是出

    2024年02月15日
    瀏覽(88)
  • SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄(第五天)MyBatis的注解開發(fā)

    SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄(第五天)MyBatis的注解開發(fā)

    ? 昨天我們深入學(xué)習(xí)了 MyBatis多表之間的關(guān)聯(lián)映射,了解掌握了一對一關(guān)聯(lián)映射,一對多關(guān)聯(lián)映射,嵌套查詢方式以及嵌套結(jié)果方式,掌握了緩存機(jī)制的一級緩存,二級緩存等概念,也使用了代碼進(jìn)行復(fù)現(xiàn)理解 。但是都是基于XML配置文件的方式來實(shí)現(xiàn)的,現(xiàn)在我們要學(xué)習(xí)一下

    2024年02月11日
    瀏覽(58)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包