Spring AOP 面向切面编程--实例

Spring AOP实例详解:编程中的面向切面编程 在Spring框架中,AOP是一个重要的特性,提供了一种以声明方式来实现横切关注点的方法。我们创建了一个简单的应用程序,定义了一个切面类,并在配置文件中启用了Spring AOP。然后,我们分别定义了"helloWorld"和"loggingAspect"两个bean,其中"helloWorld"是我们的目标对象,"loggingAspect"是我们的切面。让我们从一个简单的应用程序开始,假设我们有一个名为"HelloWorld"的类,其中包含一个名为"sayHello"的方法。创建一个简单的应用程序。 阅读详情

A.背景知识:
aop 是spring 中面向切面编程的实现。
面向切面编程,理解为将系统中多出公共操作代码抽象出来的模块;在运行时动态地将代码切入到指定的类的指定方法的指定位置的编程是想叫做面向切面编程;
B.基本概念:
切面(aspect):从对象中抽象出来的横切性功能模块,由通知和切入点组成叫做切面;例如,日志操作、权限控制;
通知(advice):切面的具体实现,例如日志操作的代码。定义为切面的某个方法;
连接点(JoinPoint):目标对象中插入通知的地方,即advice 的应用位置;
切入点(pointcut):切面的一部分对应为表达式,定义了通知作用于什么样的连接点上,即advice 的应用范围;
目标对象(target):那些即将切入切面的对象。这些对象中只剩下干干净净的业务代码;
代理对象(proxy):将通知应用到目标对象之后所创建的代理对象;
织入(weaving):将切面应用于目标对象到创建出代理对象的过程;

这是spring-aop实现的两个实例:
1.通过注解的方式实现aop:
1.1配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 
    http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    <!-- 使用annotation自动注入bean,并启动相关处理注解的进程 -->

    <context:component-scan base-package="phda.*">
         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    </context:component-scan>
    <aop:aspectj-autoproxy proxy-target-class="false"/>
</beans>

其中:proxy-target-class取值true|false 采用jdk动态代理||采用cglib动态代理。
1.2切面

package phda.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
/**
 * 自定义一个aop 切面
 * @author Administrator
 */
@Aspect
@Component
public class TestAop implements ITestAop{

    public TestAop(){
        System.out.println("init testAop");
    }

    @Pointcut("execution(* phda.server.StudentServer.*(..))")
    public void tt(){
        System.out.println("cut point");
    }

    @Before("tt()")
    public void beforeFn(JoinPoint join){
        Object[] objArr = join.getArgs();
        for(Object obj : objArr)
            System.out.println(obj.toString());

        System.out.println("切入点:"+join+" ");
        //System.out.println(fileName);
        System.out.println("before");
    }

    @After("tt()")
    public void afterFn(JoinPoint join){
        System.out.println("after");
    }

    @Around("tt()")
    public void aroundAdvice(ProceedingJoinPoint dd ) throws Throwable{
        System.out.println("around...");
        dd.proceed();
        System.out.println("around...after");
    }
    @AfterReturning("tt()")
    public void afterAdvice(){
        System.out.println("return ....");
    }

    @AfterThrowing("tt()")
    public void afterThrow(JoinPoint joinPoint, Exception e){
        System.out.println("throw after"+e.getMessage());
    }
}

2.通过配置文件的方式实现aop
2.1配置文件内容:

<bean id="testAop2" class="phda.aop.TestAop2"></bean>
    <!-- 通过配置的方式实现aop 功能 -->
    <aop:config>
        <aop:aspect id="aop2" ref="testAop2">
            <aop:pointcut expression="execution(* phda.server.StudentServer.*(..))" id="pointcut2"/>
            <aop:before method="beforeAdvice" pointcut-ref="pointcut2"/>
        </aop:aspect>   
    </aop:config>

2.2切面代码:

public class TestAop2 { 
    public void beforeAdvice(JoinPoint join){
        System.out.println("before.. by config file");
    }
}

上面这些知识部分代码:
实例项目下载:

树莓派5安装ROS2小白指南避坑攻略 手把手教你如何在树莓派5上顺利安装ROS2,避开常见问题与陷阱,提升配置效率。针对树莓派5安装ros2过程中的依赖冲突、源配置错误等高频难题提供解决方案,适合新手快速上手。 阅读详情

相关推荐

SAP中MRP运行计划行超限问题的分析与解决

SAP中基于生产性物料的采购特点,通常会采用采购计划协议的方式进行采购。其具体的采购计划通常来自于成品计划独立需求,然后通过物料清单,经由MRP跑出。 在采购计划协议中的计划行中,存在一个计划行号,随着MRP在不断跑出新的计划行,该行号资源会消耗完。当计划行号消耗完后,MRP不会再跑出新的计划行。且在MD04或MD02中看不到类似提示信息。此时可以通过MD05来查看是否出现类似下图的提示信息。 ...

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 3844

AOP技术术语

一、切面(Aspect) 从对象中抽取出来的横切性功能模块。类似与OOP中的一个类。由通知和切入点两部分组成。 二、通知(Advice) 切面的具体实现,例如具体的日志操作代码,一般是是切面中的某个方法。 三、连接点(Joinpoint) 目标对象中插入通知的方法。即advice的应用位置。spring中只支持是方法 四、切入点(Poi...

150

论文、报告中那些乱七八糟的图(甘特图、卡吉图,桑基图,小提琴图,弦图,螺旋图,风玫瑰图)

在一些论文或报告中,总是会看到一些熟悉的图,但作者总是不能好好说话,非得搞个洋名字、缩写字或者半洋半中的词来显示它多么高大上,有时候这种故弄玄虚、华而不实的写法也实在是让人看了不伦不类,图首先是让读者更容易看懂的,不是让你来故作高深、玩玄学的。

David_jiang 9427

SpringBoot之AOP面向切面编程实例

目录1.引入pom依赖2.切入点表达式——组成——逻辑运算符——通配符——范例3. 启动类配置4.通知类型4.1 @Before : 标注当前方法作为前置通知4.1.1 创建自定义注解(用于使用注解作为切入点)4.1.2 设置切面类以及Before切面方法4.1.3 @Before : 标注当前方法作为前置通知测试4.1.3.1 Controller层4.1.3.2 service层4.1.3.3 serviceimpl层@Before标注当前方法作为前置通知测试结果:4.2 @After : 标注当

weixin 19953181360 3933

用matlab编程求矩阵的极大无关组,向量组极大无关组表示问题

已知向量组T:Eqn11.gif (3.16 KB, 下载次数: 1)2013-10-21 19:19 上传.(1) 求向量组T的秩,并判断向量组T的相关性;(2) 求T的极大线性无关组;(3) 将其余的向量用所求的极大线性无关组线性表示。程序:>> A=[1 1 3 2;-1 1 -1 3;5-2 8 9;-1 3 1 7]>> r=rank(A)>> A1=...

weixin_35094083的博客 7385

基于Arduino的智能垃圾桶

通过本次简单的Arduino智能垃圾桶小实验可以快速了解Arduino的基本用法 1、材料准备 Arduino UNO HC-SR04超声波模块 SG90舵机 杜邦线 电源 电脑 2、代码分析 电机的控制 #include<Servo.h> #define duoji D5 Servo myduoji; void setup() { myduoji.attach(duoji); //舵机连接 Serial.begin(115200); } void loop() { myduoji.w

weixin_41679960的博客 1万+

Spring AOP面向切面编程案例 (注解驱动开发)

AOP(动态代理):指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式; 【1】导入 aop 模块;Spring AOP:(spring-aspects); 【2】定义一个业务逻辑类(MathCalculator),在业务逻辑运行的时候将日志进行打印(方法之前、方法运行结束、方法出现异常,xxx); 【3】定义一个日志切面类(LogAspects):切面类里面的方法需要动态感知 MathCalculator.div 运行到哪里然后执行; 通知方法: ■ 前置通知(@Befor..

程序猿进阶 1617

喷涂机器人系列编程:ABB IRB 5500_(2).ABB IRB 5500喷涂机器人系统架构与组件

ABB IRB 5500喷涂机器人系统不仅在性能上表现出色,而且在安全和维护方面也提供了全面的解决方案。通过本文的详细介绍,希望读者能够更好地理解和掌握这一系统的架构和功能,为实际应用提供有力支持。

zhubeibei168的博客 777

AOP编程,面向切面编程实例

Spring两大底层机制,一个是IOC,控制反转,用于减低计算机代码之间的耦合度。最常见的方式是依赖注入(Dependency Injection,简称DI)。另一个则是AOP,面向切面编程。 什么是面向切面编程AOP? 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP.

qq_43171656的博客 808

10、数据挖掘与轨迹生成技术:FSSEMiner与CondTraj - GAN的探索

本文介绍了两种先进的数据处理技术:FSSEMiner算法用于从动态属性图中挖掘频繁顺序子图演化模式,揭示如交通流和疾病传播等复杂系统的演化规律;CondTraj-GAN是一种端到端的条件生成对抗网络,能够生成高质量的合成车辆轨迹,解决真实轨迹数据因隐私问题难以获取的挑战。通过实验评估与真实数据集验证,两种技术在可扩展性、实用性及生成质量方面均表现出色,并在交通管理、城市规划、自动驾驶研发等领域具有广泛应用前景。

grafana8visual的博客 87

手把手教你学Simulink——基于Simulink的电压型 vs 电流型整流器性能对比

摘要:本文基于Simulink平台对比分析了电压型整流器(VSR)和电流型整流器(CSR)的性能差异。VSR采用电容滤波,具有高功率因数(PF>0.99)、低输入电流THD(<3%)等优势,但动态响应较慢;CSR采用电感滤波,动态响应快(<0.05s),但THD较高(5%~8%)。研究建立了统一测试平台,详细对比了两者在稳态性能、动态响应、效率等方面的差异,并给出了控制算法实现和参数优化建议。通过量化分析,为电力电子工程师提供了拓扑选型依据,可根据恒压/恒流需求选择最优方案,有效缩短开发周

MHD0815的博客 172

spring核心之AOP面向切面编程详解及简单案例

AOP面向切面编程定义 AOP全称Aspect Oriented Progremming,意为面向切面编程,利用AOP对业务逻辑的各个部分进行隔离,从而使得业务逻辑各个部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AOP的作用及优势 作用:在程序运行期间,不修改源代码对已有方法进行增强。 优势: 减少重复代码 减少重复代码 提高开发效率 维护方便 AOP相关专业术语(了解) Joinpoint(连接点) 在业务层service方法中连接业务和增强方法(代理)的方法

BUG粉碎机 828

OpenOCD入门到精通:第20章 Target 子系统源码分析

摘要:本章深入分析OpenOCD Target子系统的核心实现机制。重点包括:1) 通过target_type虚函数表实现多架构抽象,支持ARM、RISC-V等30+种目标;2) ARM ADIv5协议栈实现,包含DAP/AP核心数据结构和访问机制;3) 分层架构设计,从调试接口层到传输层的完整调用链路。系统采用面向对象思想,统一管理目标状态、寄存器缓存、断点/观察点等调试要素,为上层提供标准化的调试操作接口。

从事嵌入式linux android驱动开发,拥有全栈能力 178

IDEA实现Spring AOP(面向切面编程)实例

1.AOP怎么样理解? AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是对传统 OOP(Object-Oriented Programming,面向对象编程)的补充,底层是用动态代理实现。怎么理解面向切面变成呢?首先要明确 "切面" 的概念。切面其实就是一个类,这个类中定义着横切关注点的信息,而横切关注点就是从每个方法中抽取出来的同一类非核心...

SilenceKiio的博客 2958

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring面向切面编程AOP(实例)

什么是AOP? AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是0OP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AOP在Spring中的作用: 提供声明式事务,允许用户自定义切面 横切关注点:跨越应用程序多个模块

weixin_44107140的博客 1121

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

spring aop实例讲解_小实例理解Spring中的AOP----面向切面编程

关于面向切面编程(Spring AOP),是在java面试中经常提及的,只有在充分理解了,日常工作中才能得心应手。 如何理解AOP呢?首先我们要思考为什么要使用切面编程,如下图: 对于一个系统来说保存用户信息、权限分配的时候,我们会有数据库事务,保存要么同时成功,要么同时失败,用户信息、权限分配是面向对象设计的类对象,是横向的;数据库事务是纵向的,像切面一样把...

weixin_39713805的博客 146

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring AOP 面向切面编程-注解理解与实例

参考博客: 大神的博客,点赞请去大神贴,本人仅做参考。 SpringBoot中的AOP处理1 理解AOP1.1 什么是AOP1.2 AOP体系与概念2 AOP实例2.1 第一个实例2.2 第二个实例3 AOP相关注解3.1 @Pointcut3.2 @Around3.3 @Before3.4 @After3.5 @AfterReturning3.6 @AfterThrowing 1 理解AOP 1.1 什么是AOP AOP(Aspect Oriented Programming),面向切面思想,是Sprin

weixin_43911286的博客 982

spring Aop 面向切面编程简单实例

最近画了一点时间研究了一下spring的aop,接下来就先直接放源码: 首先创建一个教师Teacher接口:package com.sise.aop; public interface Teacher { public void teach(); }然后是一个教师类:package com.sise.aopimpl;import com.sise.aop.Teacher;public cl

Danny_idea的博客 3312

Spring---面向切面编程(aop)实例

Spring---面向切面编程(aop)实例 AOP(Aspect Oriented Programming)面向切面编程: 1、产生的原因:为了将程序中重复的代码抽取出来,秉承程序设计“高内聚,低耦合”的思想。 比如: Session开启事务 查询代码 session提交事务 头部和尾部的代码(开启事务和提交事务),每个test方法中都是相同的代码,每次重复编写这些代码显得很浪费...

小梦想的博客 906

Spring AOP (面向切面编程)原理与代理模式—实例演示

Spring AOP 原理与代理模式

白白白鲤鱼的博客 3403

Spring框架--Aop面向切面编程实例1

在aop文件夹中创建一个增强类 package cn.gwj.aop; import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint; import java.util.Arrays; /** * 增强类 */ public class AopLogger { Logger logger=Logger.getL...

慕村古楼诉 145

使用Spring进行面向切面编程(AOP)

简介 面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。 除了类(classes)以外,AOP提供了 切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理。 (这些关注点术语通常称作 横切(crosscutting) 关注点。) Spring的一个关键的组件就是 AOP框架。 尽管如此,Spring IoC容器并不依赖于AO

雪飘雪融的博客 1894

【SSM直击大厂】第十章:Spring AOP面向切面编程

🙊🙊作者主页:🔗求不脱发的博客 📔📔 精选专栏:🔗SSM直击大厂 📋📋 精彩摘要:SpringAOP面向切面编程是Java OOP面向对象编程的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍 生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序 的可重用性,同时提高了开发的效率。 💞💞觉得文章还不错的话欢迎大家点赞👍➕收藏⭐️➕评论💬支持博主🤞 📚 📖 📝1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ ..

专注Spring、SSM、数据结构与算法、蓝桥杯领域创作者 3531

【Spring】面向切面编程详解(AOP)

①AOP(Aspect Oriented Program)即面向切面编程。我们先回顾以下三层架构,三层架构式垂直架构,即一层对另一层提供服务,不能越级访问,分级进行运作。上述架构是垂直分布的,而面向切面则是一个切面:②到底是什么切面呢?就是把各种类中冗余的代码提取出来,在需要用的时候就横向切入,就像一个切面一样。到底是什么冗余代码呢?事务处理、异常处理等等!突然来一大堆听不懂。③举个栗子:比如说事务控制,在我们的业务中,虽然查询是最多的,但是添加、修改、删除也不少。

未来可以改变 6720

[Spring] AOP面向切面编程

AOP执行流程,切点表达式,通知类型,切点数据获取

沫洺的博客 1528
上一篇: Java 动态代理实例
下一篇: 一个js展示日历的插件
phangle2015
博客等级 码龄12年 22粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值