spring AOP

AOP面向切面编程
  1. AOP面向切面编程

Aop是一种编程思想,oop是面向对象编程,aop是面向切面编程,这两种思想不是互斥的,aop是oop的完善和补充,解决oop横向切面不足的能力。Oop在于对事物的抽象,aop在于对横向关注编程的能力,aop的作用是把开发中,业务代码和非业务代码分离重用。

实现方案:动态代理,spring支持两种动态代理,分别是JDK动态代理,CGlib动态代理。

AOP相关术语:

  1. 横切关注点:对那些方法进行拦截,拦截后怎么处理,这些关注点成之为横切关注点。
  2. 切面(aspect):类是对物体特征的抽象,切面就是对横切关注点的抽象。
  3. 连接点(jionpoint):程序执行时的某个特定的点,在spring中就是某一个方法的执行。
  4. 切入点(pointcut):对连接点进行拦截的定义。
  5. 通知(advice):所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置,后置,异常,返回,环绕通知五类。
  6. 目标对象:代理的目标对象。
  7. 织入(weave):将切面应用到目标对象并导致代理对象创建的过程。
  8. 引入(introduction):在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段。
  9. Advisor(通知器):其实就是切点和通知的结合。

Spring Aop的实现

编写被代理类

//目标对象 实现的接口

public interface ICalcute {

public Integer add(Integer a,Integer b);

public Integer add(Integer a, Integer b ,Integer c);

public Integer div(Integer a,Integer b);

}

------------------------------------------------------------------------------------

//被代理类

@Component

public class SimpleCalcute implements ICalcute {

@Override

public Integer add(Integer a, Integer b) {

System.out.println("----add---run-----");

return a+b;

}

@Override

public Integer add(Integer a, Integer b ,Integer c) {

return a+b+c;

}

@Override

public Integer div(Integer a, Integer b) {

System.out.println("----div---run-----");

return a/b;

}

}

编写切面类

//切面类

/**

*1、切面类:对横向关注点的抽象

*2、@Aspect: 标记该类为切面

*3、@Component:标记为一个组件 注册到IOC容器

*/

@Aspect

@Component

public class LogAspect {

/**

* 1.切面中的方法为增强代码, 也就是通知。

* 2.增强代码执行时机: 目标方法执行前(前置通知)/ 返回数据(返回通知) / 执行后(后置通

知) /异常 (异常通知) ,

* 3. 特别的是环绕通知在上述几种情况下都执行。

* 4.异常通知和返回通知 互斥,原因是当出现异常 就不能获得返回值。

*/

@Before(value="execution( * com.bjlemon.aop.*.*(..) )")//前置通知

public void logInfo( JoinPoint jp> ) {

System.out.println("前置通知:增加日志功能....."+ jp.getSignature().getName()+"实参"+Arrays.toString(

jp.getArgs() ));

}

@After( value="execution( * com.bjlemon.aop.*.*(..) )" )//后置通知

public void logAfter() {

System.out.println("后置通知:保存到文件.....");

}

@AfterReturning(value="execution( * com.bjlemon.aop.*.*(..) )",returning="r")//返回通知

public void logReturn(JoinPoint jp, Object r ) {

System.out.println("返回通知拿到返回值"+r);

}

@AfterThrowing(value="execution( * com.bjlemon.aop.*.*(..) )",throwing="<u>ex</u>")//后置通知

public void logReturn(JoinPoint <u>jp</u>, Exception ex) {

System.out.println("异常通知:"+ex);

}

@Around(value="execution( * com.bjlemon.aop.*.*(..) )")//环绕通知

public void logArround( ProceedingJoinPoint p ) {

try {

System.out.println("前置通知");

Object obj= p.proceed( p.getArgs() );

// 目标方法执行

System.out.println("返回通知:"+obj);

} catch (Throwable e) {

System.out.println("异常通知");

}

System.out.println("后置通知");

}

}

XMl配置

<?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:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/springbeans.xsd http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-4.3.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">

<!-- <u>ioc</u> 扫描包 -->

<context:component-scan base-package="com.bjlemon"/>

<!-- 开启动态代理 -->

<aop:aspectj-autoproxy/>

</beans>

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值