spring自定义注解

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 6         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
 7         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
 8     <aop:aspectj-autoproxy />
 9         
10     <context:component-scan base-package="wjf.maven">
11         <context:include-filter type="annotation"
12             expression="org.aspectj.lang.annotation.Aspect" />
13     </context:component-scan>
14 </beans>
复制代码
复制代码
 1 package wjf.maven;
 2 
 3 import java.lang.annotation.Documented;
 4 import java.lang.annotation.ElementType;
 5 import java.lang.annotation.Retention;
 6 import java.lang.annotation.RetentionPolicy;
 7 import java.lang.annotation.Target;
 8 
 9 @Documented
10 @Retention(RetentionPolicy.RUNTIME)
11 @Target({ ElementType.METHOD, ElementType.PARAMETER })
12 public @interface DemoAnnotation {
13     //定义注解里的参数,通过default指定默认值
14     String desc() default "##########无描述信息##########";
15 }
复制代码
复制代码
 1 package wjf.maven;
 2 
 3 import org.aspectj.lang.ProceedingJoinPoint;
 4 import org.aspectj.lang.annotation.Around;
 5 import org.aspectj.lang.annotation.Aspect;
 6 
 7 //定义一个切面
 8 @Aspect
 9 public class DemoProcess {
10      
11     @Around(value = "execution(* wjf.maven.*.*(..)) && @annotation(log)")
12     public Object aroundMethod(ProceedingJoinPoint pjd, DemoAnnotation log ) {
13         Object result = null;
14         System.out.println(log.desc());
15         try {
16             System.out.println("前置通知");
17             result = pjd.proceed();
18             System.out.println("后置通知");
19         } catch (Throwable e) {
20             System.out.println("异常通知");
21         }
22         System.out.println("返回通知");
23         return result;
24     }
25 }
复制代码
复制代码
 1 package wjf.maven;
 2 
 3 import org.springframework.stereotype.Service;
 4 
 5 @Service
 6 public class AopTest {
 7 
 8     @DemoAnnotation(desc = "我是测试")
 9     public void test() {
10         // System.out.println("hello world!!");
11     }
12     
13     @DemoAnnotation
14     public void test2() {
15          System.out.println("hello world!!");
16     }
17 }
复制代码

 

posted @   wujf  阅读(410)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示