首页 > 编程语言 >SpringBoot实战笔记:02_使用注解与Java配置的Aop示例

SpringBoot实战笔记:02_使用注解与Java配置的Aop示例

时间:2022-11-05 20:35:49浏览次数:48  
标签:02 Java 示例 class add Action 注解 拦截 public

转载:https://blog.csdn.net/android_zyf/article/details/79579875

<!--02_新的依赖-->
<!--导入spring的aop支持-->
<dependency>
<groupId>${spring-groupId}</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring-framework.version}</version>
</dependency>

<!--导入AspectJ依赖库(该库提供注解式切面编程)-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.13</version>
</dependency>

<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
</dependency>

1,自定义注解类:@Action

/**
* 拦截规则的注解
*/
@Target(ElementType.METHOD)//该注解使用在方法声明上
@Retention(RetentionPolicy.RUNTIME)//该注解在运行时使用
//注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在
//也就是说内存中的字节码中也包含该注解
@Documented//使用javadoc等工具生成文档时,会将该注解也加入进文档
public @interface Action {

String name();

}

2,用于演示注解拦截的类:ShowAnnotationService

/**
* 使用注解的被拦截类
*/
@Service
public class ShowAnnotationService {

@Action(name = "注解式拦截的add操作")
public void add(){}
}

 

3,用于演示被方法规则拦截的类:ShowMethodService


/**
* 使用方法规则的被拦截类
* 在add上没有声明@Action注解
*/
@Service
public class ShowMethodService {

public void add(){}

}

4,切面类,定义拦截后的操作

/**
* 切面
*/
@Aspect//声明此类是一个切面
@Component//将此机切面,放入Spring容器中,成为一个bean
public class LogAspect {

//声明切入点
@Pointcut("@annotation(com.zyf.Action)")
public void annotationPointCut(){

}

//声明通知(建言),使用上面定义的那个切点
@After("annotationPointCut()")
public void after(JoinPoint joinPoint){
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();

Action action = method.getAnnotation(Action.class);
//通过反射获得注解上的属性,@action(name="我就是属性")
System.out.println("注解式拦截:"+action.name());
}

//声明通知(建言),直接使用拦截规则作为参数
@Before("execution(* com.zyf.ShowMethodService.*(..))")
public void before(JoinPoint joinPoint){

MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
System.out.println("方法规则拦截:"+method.getName());

}
}

5,Java配置的配置类

@Configuration//这是一个配置类
@ComponentScan("com.zyf")//扫描哪些包中的注解
@EnableAspectJAutoProxy//开启Spring对AspectJ的支持
public class AopConfig {

//因为我们已经在需要使用的类上,通过注解的方式声明成bean了
//就无需再java配置类中,自定义方法返回对象了

}

public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(AopConfig.class);

ShowAnnotationService annotationService = context.getBean(ShowAnnotationService.class);
ShowMethodService methodService = context.getBean(ShowMethodService.class);


annotationService.add();
methodService.add();

context.close();
}
}



 

 


标签:02,Java,示例,class,add,Action,注解,拦截,public
From: https://www.cnblogs.com/ceshi2016/p/16861006.html

相关文章

  • 2022-2023-1 20221322《计算机基础与程序设计》第十周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(2022-2023-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2022-2023-1计算机基础与程序设计第十周作业......
  • Java的Map集合
    Java的Map集合1.*MapMap用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value,key和value都可以是任何引用类......
  • java IO复制文件
    packagecom.tedu.day1201;importjava.io.FileInputStream;importjava.io.FileOutputStream;publicclassCopyFile{publicstaticvoidmain(String[]args)......
  • JAVA----线程生命周期和状态
    1.新建状态(New)新创建了一个线程对象,但还没有调用start()方法。实现Runnable接口和继承Thread可以得到一个线程类,new一个实例出来,线程就进入了新建状态。2.Runnable状态......
  • SpringBoot实战笔记:01_Spring中的Java配置
    转载:https://blog.csdn.net/android_zyf/article/details/79579862Spring4.x与SpringBoot都推荐使用Java配置xml配置:将bean的信息配置在xml配置文件中注解配置:在对应的bea......
  • 2022.45 AIGC
    从语音到静态画面再到动态影像,AIGC(人工智能生成内容)对短视频完成了全面渗透。输入文案,自动合成语音,AI已成为当下短视频批量生产的标配;选一首大众熟悉的歌曲,让AI根据歌词生......
  • 川渝杯2022个人决赛部分wp
    re-babyre1、下载得到chall.txt,使用file命令查看文件类型,该文件是python文件2.这里将chall.txt重命名为chall.pyc使用在线python反编译得到python(https://tool.lu/pyc)fro......
  • Java学习——11.06
    Java的第一个大关。scanf函数的不同。这可能就是收到C语言的思维影响吧,Java中的scanf函数的运用和先前引用实例变量一样,要先new一个。例:Scannerscanner=newScann......
  • java常用API--->ArryList集合基础
    简述集合和数组的对比数组长度固定,集合长度可变。数组可存储基本数据类型和引用数据类型,集合只能存储引用数据类型,如果要存储基本数据类型要将其变成包装类Arrylis......
  • JavaIO流
    我们得先了解什么是文件?文件就是我们保存数据的地方(类似word文档,excel文件,png图片,MP4视频,…这些都是存储数据的地方)流的概述​要完成文件的读写操作,就必须了解C#中另外......