Spring-aop

Spring AOP 面向切面 阅读详情
1. Spring中AspectJ指示器
  • arg() 限制连接点匹配参数为指定类型的的执行方法。
  • @args() 限制连接点匹配参数由指定注解标注的执行方法。
  • execution() 用于匹配是连接点的执行方法。
  • this() 限制连接点匹配AOP代理的bean引用为指定类型的类。
  • target 限制连接点匹配目标对象为指定类型的类。
  • @target() 限制连接点匹配特定的执行对象,这些对象对应的类要具有指定类型的注解
  • within() 限制连接点匹配制定的类型。
  • within() 限制连接点匹配指定注解所标注的类型。
  • @annotation 限定匹配带有指定注解的连接点。
2. 编写切点
    execution(* concert.Performance.perform(..)) && within(concert.*)
    *   :表示任意返回值。

    (..) :表示任意参数。
   注解使用:&&/||/!

   xml使用:and/or/not

   使用bean:execution(* concert.Performance.perform()) and bean('beanId') / execution(* concert.Performance.perform()) and !bean('beanId')

3. 通知方法

    @After/@AfterReturning/@AfterThrowing/@Around/@Before

4. 切面

@Aspect
public class Audience {
    @Before("execution(* *.source.aop.TestBean.test(..))")
    public void silenceCellPhones(){
        System.out.println("Silence cell phones");
    }
}

@Aspect
public class AudienceCut {
    @Pointcut("execution(* *.source.aop.TestBean.test(..))")
    public void test(){}
    @Before("test()")
    public void silenceCellPhones(){
        System.out.println("Silence cell phones");
    }
}
@Aspect
public class AudienceAround {
    @Pointcut("execution(* *.source.aop.TestBean.test(..))")
    public void test(){}
    public void watchPerformance(ProceedingJoinPoint p){
        try {
            System.out.println("前置");
            p.proceed();
            System.out.println("后置");
        }catch (Throwable throwable){
            throwable.printStackTrace();
        }
    }
}
@Aspect
public class AudienceParam {
    @Pointcut("execution(* *.source.aop.TestBean.param(String)) && args(name)")
    public void param(String name){}
    @Before("param(name)")
    public void silenceCellPhones(String name){
        System.out.println(name+":Silence cell phones");
    }
}

5. 启动aspectJ自动代理

    @EnableAspectJAutoProxy/<aop:aspectj-autoproxy/>

6.扩展新接口

@Aspect
public class EncoreableIntroducer {
    @DeclareParents(value = "com.source.aop.TestBean+",defaultImpl = DefaultEncoreable.class)
    public static Encoreable encoreable;
}
Encoreable encoreable = (Encoreable)context.getBean("testBean",TestBean.class);
encoreable.performEncore();

XML方式配置

<bean id="test" class="com.source.aop.TestBean"/>
	<bean id="audience" class="com.source.aop.Audience"/>
	<bean id="audienceAround" class="com.source.aop.AudienceAround"/>
	<bean id="audienceParam" class="com.source.aop.AudienceParam"/>
	<!-
	<aop:config>//没有切点类型
		<aop:aspect ref="audience">
			<aop:before pointcut="execution(* com.source.aop.TestBean.test(..))" method="silenceCellPhones"/>
			<aop:before pointcut="execution(* com.source.aop.TestBean.test(..))" method="takeSeats"/>
			<aop:after  pointcut="execution(* com.source.aop.TestBean.test(..))" method="applause"/>
			<aop:after  pointcut="execution(* com.source.aop.TestBean.test(..))" method="demandRefund"/>
		</aop:aspect>
	</aop:config>
	-->

	<aop:config>
		<!--
		<aop:aspect ref="audience">//有切点
			<aop:pointcut id="pointTest" expression="execution(* com.source.aop.TestBean.test(..))"/>
			<aop:before pointcut-ref="pointTest" method="silenceCellPhones"/>
			<aop:before pointcut-ref="pointTest" method="takeSeats"/>
			<aop:after  pointcut-ref="pointTest" method="applause"/>
			<aop:after  pointcut-ref="pointTest" method="demandRefund"/>
		</aop:aspect>

		<aop:aspect ref="audienceAround">//环绕增强
			<aop:pointcut id="pointTest" expression="execution(* com.source.aop.TestBean.test(..))"/>
			<aop:around method="watchPerformance" pointcut-ref="pointTest"/>
		</aop:aspect>

		<aop:aspect ref="audienceParam">//处理参数
			<aop:pointcut id="pointParam" expression="execution(* com.source.aop.TestBean.param(String)) and args(name)"/>
			<aop:before method="demandRefund" pointcut-ref="pointParam"/>
		</aop:aspect>
		-->
		<aop:aspect>//添加新功能
			<aop:declare-parents
					types-matching="com.source.aop.TestBean+"
					implement-interface="com.source.aop.Encoreable"
					default-impl="com.source.aop.DefaultEncoreable"/>
		</aop:aspect>
	</aop:config>

技术美术个人笔记(十六)——Houdini到UE的大地形 文章目录关于地形白模制作关于PDG流程 关于地形白模制作 用heightfield noise和笔刷刷出合适的mask做山形叠加: 用remap可快捷反转mask ,用来做平原地区的小型丘陵: 接着用clip切平最低处,用distort制造侵蚀等,对部分地区用笔刷进行微调拓宽峡谷: 用经过sweep打平的曲线以及裁切的各种多面体用heightfield_project投影制作河道和水池,用blur mask并remap的方法拓宽河道 用distort、erode制造合适的弯曲和侵蚀,同理可挖出月牙形 阅读详情

相关推荐

bert-ini:一种基于bert的实体对齐交互模型

本次分享一项来自IJCAI-20的实体对齐工作,该工作提出了一种不同于以往的采用图结构信息进行实体对齐的技术方案,该方案取得了当时的最好效果;不仅如此,模型本身的对齐效率在该项工作中也被考虑,实际工作中非常具备借鉴意义。

qq_33331424的博客 3152

详解Spring AOP

Aspect Oriented Programming(面向切面编程),OOP是面向对象编程(开发的时候把一个个都抽象成对象来开发),两者的维度不同,处理的事情不同切⾯就是指某⼀类特定问题, 所以AOP也可以理解为⾯向特定⽅法编程。面向切面编程就是针对某一类特定问题统一进行编程比如people类有自己的属性和行为,但是有小一部分人生病要去医院看病,看病这个业务逻辑就不属于哪一个类,因为people泛指所有人,所有人不会都看病。

N_0050的博客 2030

Matlab图像处理频域滤波实现——高斯低通、高通、带通带阻滤波器

如果你想要进一步了解更多的相关知识,

小嘤熊的博客 1万+

Spring AOP详细介绍

什么是AOP AOP(Aspect-OrientedProgramming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,...

JinXYan的博客 7万+

基于MediaPipe的智能俯卧撑计数与姿势矫正系统

在现代健身和体能训练中,俯卧撑是最基础也是最有效的自重训练动作之一。然而,许多人在进行俯卧撑训练时常常存在姿势不正确、计数不准确等问题。本文将介绍如何利用计算机视觉和姿态估计技术,开发一个智能的俯卧撑计数与姿势矫正系统。

qq_36224726的博客 916

STM32驱动SPL06-001气压传感器:I2C通信与温度补偿实战

气压传感器在无人机定高、室内定位和气象监测中至关重要。SPL06-001凭借±0.06 hPa相对精度和I2C接口,成为STM32项目的理想选择。通过I2C总线读取原始数据,并利用出厂校准系数进行温度补偿和气压解算,可输出高精度气压值。本文详细解析SPL06-001的寄存器操作、校准系数拼接及补偿算法,并分享I2C上拉电阻、地址配置等避坑经验,帮助开发者快速实现气压测量与高度解算。

weixin_29188043的博客 340

Spring AOP 详解

Spring AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架提供的一种编程范式,它允许开发者将横切关注点(如日志、事务管理、权限检查等)与业务逻辑分离,从而提高代码的模块化和可维护性。Spring AOP 基于代理机制实现,它为Spring应用提供了声明式事务管理等功能。

2301_80035594的博客 6824

Visual Studio 6.0 镜像下载全指南:从企业版到中文版

本文提供Visual Studio 6.0企业版和中文版的镜像下载全指南,包括详细版本解析、已验证的下载链接及校验信息。针对现代系统的安装技巧和兼容性处理方案,帮助开发者高效获取并运行这一经典开发工具,特别适合维护遗留系统的专业人员。

weixin_33712987的博客 1037

【Spring】AOP

AOP(Aspect Oriented Programming) 是一种编程范型,即面向切面编程。什么是面向切面编程?切面就是指某一类特定问题,所以AOP也可以理解为面向特定方法编程。面向编程旨在通过分离横切关注点来提高代码的模块化和可维护性,允许开发者将那些与业务逻辑无关,但又需要在多个地方使用的功能(如日志记录、事务管理、安全性等)从业务逻辑中分离出来。在前面我们的登录校验,用了拦截器,其实也是对AOP思想的一种实现。统一数据返回格式和统一异常处理也是AOP的一种实现。

zhyhgx的博客 1913

第五节_PySide6基本窗口控件_主窗口和标签

本文介绍了PySide6中主窗口和标签控件的使用。主要内容包括: 窗口控件分类: QWidget是基础窗口部件,可作为独立窗口或子部件 QMainWindow提供标准应用程序框架,包含菜单栏、工具栏等 QDialog用于对话框,支持模态交互 主窗口创建: 演示了如何创建QMainWindow子类 实现了窗口居中、设置图标、状态栏等功能 提供了窗口几何信息的获取方法 QLabel标签控件: 继承自QFrame类 用于显示文本或图像 文章通过代码示例详细说明了主窗口的创建和使用方法,包括位置控制、图标设置等常见

su桥木的博客 1022

用MATLAB计算卡方值

然后,我们计算了期望频数,即在两个分类变量独立的情况下,每个单元格的预期频数。接下来,我们使用卡方检验的公式计算了卡方值。卡方检验是一种常用的统计方法,用于确定两个分类变量之间是否存在相关性。它基于观察到的频数和期望频数之间的差异来评估分类变量之间的独立性。在MATLAB中,我们可以使用。请注意,这只是一个简单的示例代码,用于说明如何使用MATLAB计算卡方值。在实际应用中,您可能需要根据您的具体数据和研究问题进行相应的修改和调整。在上面的代码中,我们首先创建了两个分类变量。函数显示了计算得到的卡方值。

CodeNexus的博客 2658

【Spring】Spring AOP

SpringAOP 认识和实现原理

bit me的博客 1948

反光柱定位算法实战05:Cartographer Landmark融合定位——从原理到实战

本文介绍了CartographerLandmark融合定位方案,该方案将反光柱作为Landmark节点直接融入Cartographer后端优化框架,避免了传统双系统切换导致的位姿跳变问题。文章详细阐述了Landmark的核心原理、数据发布格式(包括ID、坐标、权重等关键字段)以及两种工作模式(建图模式和导航模式)。特别指出组合反光柱作为Landmark可提供方向参考,有效解决镜像歧义问题。该方案通过统一优化框架实现稳定定位,尤其适用于缺乏自然特征的环境,但存在ID匹配不稳定等局限性。整体而言,Cartogr

Studying…… 424

Spring Aop实例

在上篇博文中,我向大家介绍了Aop重要概念和教程,这回给出代码示例。 一、XML方式 1. TestAspect:切面类 package com.spring.aop; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; public class TestAspect { pu

鹏霄万里展雄飞 8万+

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

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

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring 配置AOP Spring注解配置AOP Spring XML 配置AOP Spring Aspect AOP

Spring 配置AOP Spring注解配置AOP Spring XML 配置AOP Spring Aspect AOP

HaHa_Sir的博客 1114

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[Spring AOP 8] Spring AOP 源码全流程总结

Spring AOP 源码全流程详细梳理

2503_91769056的博客 1404

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: maven-nexus私服
下一篇: Java csv文件生成
wangchunting
博客等级 码龄11年 2粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值