当前位置: 首页 > news >正文

java spring AOP 完全注解开发

我们先创建一个项目
然后引入java spring aop的依赖
在这里插入图片描述

然后 在src下创建目录 我这里 直接就叫 Aop了
下面创建一个User类
参考代码如下

package Aop;import org.springframework.stereotype.Component;@Component
public class User {public void add(){System.out.println("add......");}
}

这个 app方法 将作为被增强方法使用

然后 我们在Aop目录下 再创建一个类 我这里叫 UserProxy 参考代码如下

package Aop;import org.springframework.stereotype.Component;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;@Component
@Aspect
public class UserProxy {//拆分公共切入点@Pointcut(value = "execution(* Aop.User.add(..))")public void commonEntryPoint() {}//被增强方法执行前调用@Before(value = "commonEntryPoint()")public void before() {System.out.println("UserProxy before...");}
}

这里 我们上面用Pointcut 写好了 切入点表达式 指定增强切入点 是 Aop包下 的 User类 add方法
然后 Before标准的方法 使用了这个切入点表达式
说明 UserProxy 作为增强类 对 User的add方法进行增强

然后 就是这次的重点 我们用一个配置类 来写 之前写在xml中的配置内容
在src目录下创建一个目录 我这里叫 config

参考代码如下

package config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;@ComponentScan(basePackages = {"Aop"})
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class configAop {
}

ComponentScan指定 开启注解扫描 我们写入了一个Aop 表示 会对 src目录下的Aop包进行注解扫描 找到有注解的类内容
EnableAspectJAutoProxy配置则是 开启Aspect生成代理对象

然后 我们在src下创建测试类 参考代码如下

import Aop.User;
import config.configAop;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class aopText {public static void main(String args[]) {ApplicationContext context = new AnnotationConfigApplicationContext(configAop.class);User user = context.getBean("user", User.class);user.add();}
}

这里 因为是配置类 我们 AnnotationConfigApplicationContext 就直接读类对象了

然后 获取User对象 然后调用add 因为UserProxy 中的方法指定增强add
所以 只要执行add 增强方法也会在特定时间点调用

运行结果如下
在这里插入图片描述
也是没有任何的问题

http://www.lryc.cn/news/20810.html

相关文章:

  • ctf pwn基础-4
  • bool与引用类型
  • tkinter界面的TCP通信/tkinter开启线程接收TCP
  • [SQL Statements] 基本的SQL知识 之DDL针对数据库的基本操作
  • Qt的MOC机制
  • Linux驱动——设备模型
  • .NET基础加强第一课--面向对象(OO)
  • 从Linux源码角度看套接字的Listen及连接队列
  • cesium: 显示闪烁的点(004)
  • 常见代码审计工具,代码审计为什么不能只用工具?
  • es8集群模式部署
  • OAuth2
  • 一、简单排序
  • 慢SQL出现原因、优化、开启慢查询日志
  • 要理解网络,其实不就是理解这三张表吗
  • Java异常架构与异常关键字
  • 【阅读笔记】SecureML: A System for ScalablePrivacy-Preserving Machine Learning
  • 【2023美赛】C题Wordle预测27页中文论文及Python代码详解
  • 【C++修行之路】STL——模拟实现string类
  • CorelDRAW2023最新版序列号使用教程
  • 【一天一门编程语言】Python 语言程序设计极简教程
  • 14、KL散度
  • TypeError: load() missing 1 required positional argument: ‘Loader‘解决方案
  • 【设计模式】 观察者模式介绍及C代码实现
  • 01-Maven基础-简介安装、基本使用(命令)、IDEA配置、(写jar,刷新自动下载)、依赖管理
  • 一、前端稳定性规约该如何制定
  • Docker(三)Docker网络
  • Js高级API
  • 团队:在人身上,你到底愿意花多大精力?
  • Linux-Poolkit提权