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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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训练数据并当服务器共享给他人