`

spring4 AOP 面向切面编程@Aspect

阅读更多

 

AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面向对象编程) 的补充.

 

AOP 的好处:

---每个事物逻辑位于一个位置, 代码不分散, 便于维护和升级

---业务模块更简洁, 只包含核心业务代码.

 

切面(Aspect): 横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象

通知(Advice): 切面必须要完成的工作

目标(Target): 被通知的对象

代理(Proxy): 向目标对象应用通知之后创建的对象

连接点(Joinpoint):程序执行的某个特定位置:如类某个方法调用前、调用后、方法抛出异常后等。连接点由两个信息确定:方法表示的程序执行点;相对点表示的方位。例如 ArithmethicCalculator#add() 方法执行前的连接点,执行点为 ArithmethicCalculator#add(); 方位为该方法执行前的位置

切点(pointcut):每个类都拥有多个连接点:例如 ArithmethicCalculator 的所有方法实际上都是连接点,即连接点是程序类中客观存在的事务。AOP 通过切点定位到特定的连接点。类比:连接点相当于数据库中的记录,切点相当于查询条件。切点和连接点不是一对一的关系,一个切点匹配多个连接点,切点通过 org.springframework.aop.Pointcut 接口进行描述,它使用类和方法作为连接点的查询条件。

<!-- AOP 面向切面编程 : 注解 -->
 <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

 

package cn.util;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;

/**
 * spring4 AOP 面向切面编程(注解)
 * @author
 *
 */
@Component
public class AOPTest {
 
 public int sum(int x,int y){
  int sum= x + y;
  System.out.println("2.方法体: sum=" + sum);
  return sum;
 }

 public int sum2(Integer x, Integer y){
  return x+y;
 }
 
 public static void main(String args[]){
  
  ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
  AOPTest test = (AOPTest)app.getBean(AOPTest.class);
  int sum=test.sum(8, 9);
  
  
 }
}

package cn.util;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

/**日志切面*/
@Component
@Aspect
public class AOPTestAspect {
 
 /**使用JoinPoint 获取 sum(int , int) 参数值*/
 @Before("execution(public int cn.util.AOPTest.sum(int , int ))")
 public void before(JoinPoint point){
  String methodName = point.getSignature().getName();
  Object[] args = point.getArgs();
  System.out.println("1.方法执行前:x=" + args[0] + "  y="+args[1] + " method: "+ methodName);
 }
 
 @After("execution(public int cn.util.AOPTest.sum(int , int ))")
 public void after(){
  System.out.println("3.方法执行后:");
 }

}

 

分享到:
评论

相关推荐

    计算机毕业设计-校园教务处管理系统.zip

    计算机毕业设计中的校园教务处管理系统是一个旨在提高校园教务管理效率和质量的综合性信息平台。该系统采用SSM(Spring、SpringMVC、MyBatis)技术栈进行构建,利用Spring框架进行业务逻辑处理和依赖注入,通过SpringMVC实现模型-视图-控制器的设计模式,以及使用MyBatis作为ORM工具进行数据库持久化操作。系统功能涵盖了学生信息管理、课程安排、成绩录入与查询、教室资源分配、考试管理、教师工作量统计等关键模块,通过提供一个用户友好的界面和强大的后台管理功能,校园教务处管理系统不仅优化了教务工作流程,还提升了学生和教师的互动体验,是计算机专业学生展示其系统分析、设计和开发能力的理想项目。

    一些关于创新创意类的电赛竞赛文档.zip

    一些关于创新创意类的电赛竞赛文档

    项目计划管理任务app应用界面xd源文件(1)AdobeXD源码下载设计素材UI设计.xd

    项目计划管理任务app应用界面xd源文件(1)AdobeXD源码下载设计素材UI设计

    电子商务公共服务平台大数据中心HTML模板源码 大数据大屏展示源码 VUE.zip

    电子商务公共服务平台大数据中心HTML模板源码 大数据大屏展示源码 VUE

    suno AI专业教程:深入探索与实践

    本资源是一份专为AI技术追求者量身定制的深度学习与suno AI实战教程,以精炼的内容和实战案例为核心,旨在帮助专业人士和学习者快速掌握suno AI的关键技术和应用。它适用于希望深化AI知识的研究学者、工程师、数据科学家以及充满热情的学生和独立研究者。通过本教程,学习者将能够作为教学辅助材料系统学习AI理论与实践,或在职业发展中通过持续学习提升专业技能。此外,本资源通过案例分析激发创新思维,指导学习者将suno AI技术应用于解决现实问题,同时提供额外的学习材料和工具,如在线模拟和代码示例,以支持深入学习和实践探索。内容丰富而不冗长,每个知识点都配有实例分析,确保学习者能够快速吸收和应用,定期更新以紧跟技术发展,是提升AI技术能力的理想选择。

    中科创达部门技术大赛.zip

    中科创达部门技术大赛

    报文响应+获取会话公钥(SessionKey)+RAS加密+AES加密+MD5加密

    1、接入申请:在接入单位应先向税务局申请,经过审批备案后,将生成的唯一的接入方编号(appCode)和通过使用OpenSSL生成的一对私钥和公钥。其中,私钥由税务局保留,接入方编号(appCode)和公钥分配给申请接入单位,接入单位应妥善保管公钥。 2、会话公钥申请 接入申请通过后,将分配得到的接入方编号(appCode)按“请求参数结构”中的规范调用“申请会话公钥”接口,调用接口成功后得到的会话公钥(publicKey),可调用其他业务接口使用。接入方单位应妥善管理会话公钥,注意保密。 3、接口调用 调用非会话公钥申请接口时,取得的会话公钥可对请求报文进行AES加密,加签;也可对返回报文进行解密,验签。 4、调用申请会话公钥接口时,用分配的公钥对requestData明文进行RSA加密,sigin为空即可。调用非申请会话公钥接口时,用会话公钥对requestData明文进行AES加密;再对(requestData密文+会话公钥明文)进行MD5加密作为sign值。

    Navigations Widgets for Web UI Kit 源码下载设计素材UI设计.xd

    25 Navigations Widgets for Web UI Kit Ver-01AdobeXD源码下载设计素材UI设计

    W801学习笔记十二:掌机进阶V3版本之驱动(PSRAM/SD卡)

    w801掌机完整代码。

    学‘四史’、正青春、颂祖国”华中师范大学 第十届大学生新媒体创意大赛.zip

    学‘四史’、正青春、颂祖国”华中师范大学 第十届大学生新媒体创意大赛

    高分课程设计 QT5.7+Sqllite数据库小系统源码+部署文档+全部数据资料

    【资源说明】 高分课程设计 QT5.7+Sqllite数据库小系统源码+部署文档+全部数据资料 可实现数据库的可视化操作:增、删、改、查.zip 【备注】 1、该项目是高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    试用Dev Containers的示例项目-Go

    计算机技术是指评价计算机系统的各种知识和技能的总称。它涵盖了计算机硬件、软件、网络和信息安全等方面。计算机技术的发展使我们能够进行高效的数据处理、信息存储和传输。现代计算机技术包括操作系统、数据库管理、编程语言、算法设计等。同时,人工智能、云计算和大数据等新兴技术也在不断推动计算机技术的进步。计算机技术的应用广泛,涵盖了各个领域,如商业、医疗、教育和娱乐等。随着计算机技术的不断革新,我们可以更加高效地实现预期自动化、标准化

    设计模式_结构型_装饰者模式.md

    设计模式_结构型_装饰者模式

    高分毕业设计 基于Python爬虫+Flask的现岗位推荐分析可视化系统源码+部署文档+全部数据资料

    【资源说明】 高分毕业设计 基于Python爬虫+Flask的现岗位推荐分析可视化系统源码+部署文档+全部数据资料 实现工作岗位的实时发现,推荐检索,快速更新以及工作类型的区域分布效果,关键词占比分析等 【备注】 1、该项目是高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    25考研大礼包,包括数学备考资料,英语备考资料,英语阅读资料,政治备考资料

    25考研大礼包,包括数学备考资料,英语备考资料,英语阅读资料,政治备考资料

    听下plus-v2.0.2.apk

    听下plus-v2.0.2.apk

    生物信息学课程学习笔记第四版2022版

    生物信息学课程学习笔记第四版2022版

    这是一个使用pytorch完成DCGAN生成动漫人物图像的机器学习代码.zip

    这是一个使用pytorch完成DCGAN生成动漫人物图像的机器学习代码

    0016数字计数器动画AdobeXD源码下载设计素材UI设计.xd

    0016数字计数器动画AdobeXD源码下载设计素材UI设计

    一个用谷歌机器学习算法识别人体姿势并用来控制GTA:SA鹞式战斗机飞行的代码.zip

    一个用谷歌机器学习算法识别人体姿势并用来控制GTA:SA鹞式战斗机飞行的代码

Global site tag (gtag.js) - Google Analytics