Java基于自定义注解的面向切面的实现

摘要:
目的:要在任何要剪切的地方添加注释,可以实现面向方面的编程自定义注释类@Target({ElementType.PARAMETER,ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public@interfaceLongOu{}@Target和@Retention是java元注释(共4个):@Target:设置注释的范围,

目的:实现在任何想要切的地方添加一个注解就能实现面向切面编程

自定义注解类

@Target({ElementType.PARAMETER, ElementType.METHOD})    
@Retention(RetentionPolicy.RUNTIME)  
public @interface LongOu {
    
}

@Target,@Retention都是java的元注解(总共有4个):

@Target:设置注解的使用范围,这里设置可以用在参数上和方法上。

@Retention:设置注解的生命周期,这里设置在运行时。

切面类:

@Aspect//声明这是一个切面
@Component//把这个类交给spring管理
public class LogOuAspect {
    // 把切面的连接点放在了我们的注解上
    @Pointcut("@annotation(com.example.demo.log.LongOu)")
    public void ouAspect() {
    }
    // 在这里定义前置切面
    @Before("ouAspect()")
    public void beforeMethod(JoinPoint joinPoint) {
        
        // 这里执行保存日志的动作
        System.out.println("方法前.......");
        //得到被切方法的参数
        System.out.println(joinPoint.getArgs()[0]);
    }
}

conctronller类:

@RestController  //springboot注解,类下的所有方法返回的数据类型为jason
public class AspectController {
    @RequestMapping("/getUser")
    @LongOu//这是我们自定义的注解,加上这个注解后就能够切到这个方法了。
    public User getUser(@PathVariable Integer id,HttpServletRequest request) {
        System.out.println("方法中。。。。。");
        User user=new User();
        user.setName("小明");
        user.setPassword("xxxx");
        return user;
    }
}

实体类:

public class User {
    Integer id;
    String name;
    String password;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
    
}

运行结果:

方法前.......
方法中。。。。。

免责声明:文章转载自《Java基于自定义注解的面向切面的实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用maven打包问题c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Protobuf 语法指南

英文: Proto Buffers Language Guide 本指南描述了怎样使用protocol buffer 语法来构造你的protocol buffer数据,包括.proto文件语法以及怎样生成.proto文件的数据访问类。(本文只针对proto2的语法) 本文是一个参考指南——如果要查看如何使用本文中描述的多个特性的循序渐进的例子,请在http...

JAVA应用JNI调用OpenCV实现人脸检测

1.JAVA的JNI部分 调用JNI的基类 Java代码 package lveyo.bcndyl.jni.opencv;   publicclass JNIBase {              public JNIBase(){}              public JNIBase(String libraryName)...

Java中Cookie常用操作类(Spring中操作Cookie)

说明:Cookie下用Key取值没有快速的方法,只能便利循环去取。 技巧:置0则cookie会立即删除,设置-1,负值则会在关闭浏览器后删除。切记一定要增加路径:setPath("/"),不然不会生效。在获取Cookie时要看下是否设置了域名:setDomain,不然本地调试时获取不到。 Cookie 的限制: 大多数浏览器支持最大为4096字节(4KB)...

基于SSM的数据库表字段查询应用

一、简介根据配置的数据源,可以查询该数据源下所有的数据库、表、以及字段说明。 二、前端代码<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <...

js动态生成二维码

一、使用jquery.qrcode生成二维码 1、首先在页面中加入jquery库文件和qrcode插件 <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.qrcode.min...

微信公众平台开发教程(六)获取个性二维码

微信公众平台开发教程(六)获取个性二维码 一、功能介绍 在进行推广时,我们可以告诉对方,我们的微信公众账号是什么,客户可以去搜索,然后关注。二维码给我们提供了极大的便捷,只要简单一扫描,即可关注。 如果已经关注过,立刻跳入对话画面。在我们进行推广时,不再是简陋的文字,可以是一个有个性的二维码,想必会很生动。 微信对二维码提供了很好的支持,而且还可以根据需要...