Transmit Value by Customized Annotation in AOP Interception
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,1 Mydoing.javapackage sh.fudan.cxiao.MyAnno.annotation;import java.lang.annotation.ElementType;impor
千家信息网最后更新 2025年02月01日Transmit Value by Customized Annotation in AOP Interception
1 Mydoing.java
package sh.fudan.cxiao.MyAnno.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface Mydoing { String name();}
2 MyService.java
package sh.fudan.cxiao.MyAnno.business;import org.springframework.stereotype.Component;import sh.fudan.cxiao.MyAnno.annotation.Mydoing;@Componentpublic class MyService { @Mydoing (name="#n") public int doSomething(int n) { System.out.println("Executing pointcut function, i.e. business operation"); return 100*n; }}
3 SupportingComponent.java
package sh.fudan.cxiao.MyAnno.component;import java.lang.reflect.Method;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.reflect.MethodSignature;import org.springframework.core.DefaultParameterNameDiscoverer;import org.springframework.expression.EvaluationContext;import org.springframework.expression.Expression;import org.springframework.expression.ExpressionParser;import org.springframework.expression.spel.standard.SpelExpressionParser;import org.springframework.expression.spel.support.StandardEvaluationContext;import org.springframework.stereotype.Component;import sh.fudan.cxiao.MyAnno.annotation.Mydoing;@Component@Aspectpublic class SupportingComponent { @Around("@annotation(sh.fudan.cxiao.MyAnno.annotation.Mydoing)") public Object doExtraThingForMydoingAnno(ProceedingJoinPoint joinPoint) throws Throwable{ System.out.print("before pointcut execution, get details of the annotation item 'name' on pointcut"); String nameEL = ""; MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = joinPoint.getTarget().getClass().getMethod(signature.getName(), signature.getMethod().getParameterTypes()); Mydoing mydoing = method.getAnnotation(Mydoing.class); nameEL = mydoing.name(); // i.e. #n System.out.println(" = " + nameEL); System.out.print(nameEL + "'s value comes from the parameter with the same name on pointcut"); // 1. create parser ExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parse_Expression(nameEL); // 2. set up evaluation context EvaluationContext context = new StandardEvaluationContext(); Object[] args = joinPoint.getArgs(); //the running time arguments value on pointcut DefaultParameterNameDiscoverer discoverer = new DefaultParameterNameDiscoverer(); String[] parameterNames = discoverer.getParameterNames(method); //parameter names on pointcut // put the parameter name on pointcut and relevant running argument value into context for(int i = 0; i < parameterNames.length; i++) { context.setVariable(parameterNames[i], args[i]); } // 3. parsing (To get the value of placeholder in annotation on pointcut) // get the value of the running time argument whose name is same as details of the annotation item 'name' on pointcut, i.e. #n Integer In = (Integer)expression.getValue(context); System.out.println(", value is " + In); int base = 1000; if (In%2==0) base=2000; if (In==0) // Do not execute pointcut when the argument equals zero return -1; Integer result = (Integer)joinPoint.proceed(); // execute the pointcut System.out.println("after pointcut execution, subsequently process the returned value from pointcut."); result += base + In; return result; // the returned value should be compatible with the returned type from pointcut }}
4 MyAnnoApplication.java
package sh.fudan.cxiao.MyAnno;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import sh.fudan.cxiao.MyAnno.business.MyService;@SpringBootApplicationpublic class MyAnnoApplication { public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(MyAnnoApplication.class); MyService myService = ctx.getBean(MyService.class); System.out.println("The result is " + myService.doSomething(5)); System.out.println("The result is " + myService.doSomething(6)); System.out.println("The result is " + myService.doSomething(0)); }}
5 the snapshot of running
i.e.
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
linux查看db2数据库密码
数据库 实体
手游服务器网络不佳多久能修复
青海博思网络技术有限公司
软件开发方法发展回顾与展望
数据库设计方案分析
服务器中病毒情况说明
运维 服务器管理
贵州优质软件开发价格
移动网络技术主要做什么
做股票软件开发
c连接mysql数据库
软件开发 体验不好
携程软件开发笔试题库
请问什么是数据库的构建
关于科技互联网的新闻
树莓派采集数据上传服务器
网络安全所涉及法律
长沙畅想网络技术老板肖俊资料
我的世界1.6.2服务器ip
电信校招网络技术笔试题
郴州正规的数据库
一可米互联网科技公司
网络安全管理局视频
一键端修改数据库密码忘了怎么办
宁晋县网络安全和信息化
深圳软件开发经理
手机未连接到服务器ip
职位是嵌入式软件开发英文
肖战重庆网络安全文娱