博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring----aop(面向切面编程)
阅读量:6095 次
发布时间:2019-06-20

本文共 3764 字,大约阅读时间需要 12 分钟。

为什么要使用AOP(面向切面编程)

  在我们整个程序中,通常都有一些公共的代码,反反复复需要我们去写,而aop简单来说就是为我们处理这些公共的代码(专心做事),将之从程序中剥离出来,统一交由spring容器来处理,而我们则只需要将业务逻辑处理好就可以了。

AOP的原理 

  1.将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决

  2.采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能。

AOP如何为我们处理这些公共代码呢?

  有以下几种方式:

    1.前置增强(目标方法执行前)

    2.后置增强(目标方法执行后)

    3.环绕增强(相当于前置增强和后置增强一起使用)

    4.异常抛出增强(目标方法抛出异常时执行)

    5.最终增强(相当于try-cache中的finally,如论以上4中增强执行了哪些,最终增强都会执行)

  aop设计单元

    切面(aspect):横切关注点而被模块化的类,称之为切面

    通知(advice):切面要完成的工作,具体指切面类中的某个方法

    连接点(joinpoint):一个应用再执行过程中能被插入切面的一个点

    切点(pointcut):通配表达式,能被匹配一个或则多个连接点

    织入(weaving):将切面应用到目标对象的代理对象的过程

    顾问(adviscor):顾问就是通知,但是顾问又要比通知强大,通知是切面中的所有方法,而顾问则可以指定到某一个方法中

   多说无益,上代码:

 创建业务类

  

1 public class DoSome { 2     public void dosome(){ 3         System.out.println("我是service层"); 4     } 5     //该方法为了对比最终增强和后置增强的效果,还有就是异常抛出增强的效果 6     public void error(){ 7         int result=5/0;//伪造一个异常 8         System.out.println("我是异常方法"); 9     }10 }

创建通知类(切面)

1 public class Advice{ 2     //前置增强 3     public void before(JoinPoint jp){ 4         System.out.println("我是方法"+jp.getSignature().getName()+"的前置增强!"); 5     } 6     //后置增强 7     public void afterReturning(JoinPoint jp,Object obj){ 8         System.out.println("我是方法"+jp.getSignature().getName()+"的后置增强!"+",返回值为"+obj); 9     }10     //环绕增强11     public void around(ProceedingJoinPoint jp) throws Throwable {12         System.out.println("我是环绕增强中的前置增强!");13         Object proceed = jp.proceed();//植入目标方法14         System.out.println("我是环绕增强中的后置增强!");15     }16     //异常抛出增强17     public void error(JoinPoint jp,Exception e){18         System.out.println("我是异常抛出增强"+",异常为:"+e.getMessage());19     }20     //最终增强21     public void after(JoinPoint jp){22         System.out.println("我是最终增强");23     }24 }

配置核心配置文件applicationContext.xml

创建测试类

1 public class App  2 { 3     public static void main( String[] args ) 4     { 5         ApplicationContext ac=new ClassPathXmlApplicationContext("/applicationContext.xml"); 6         DoSome bean = ac.getBean(DoSome.class); 7         //bean.dosome(); 8         bean.error(); 9     }10 }

自行测试,在下就不发截图了

还有就是需要的pom节点

1 
2
3
org.springframework
4
spring-context
5
5.1.0.RELEASE
6
7
8
9
org.springframework
10
spring-core
11
5.1.0.RELEASE
12
13
14
15
org.springframework
16
spring-beans
17
5.1.0.RELEASE
18
19
20
21
org.springframework
22
spring-expression
23
5.1.0.RELEASE
24
25
26
27
28
org.aspectj
29
aspectjweaver
30
1.9.2
31
32
33
34
org.aspectj
35
aspectjrt
36
1.9.2
37

aspectj是aop的一个工具增强方法中的JoinPoint对象是由aspectj提供

当然,实现业务增强的方法不光这一种,我们还可以实现接口从写对应的方法

  前置增强(MethodBeforeAdvice)后置增强(AfterReturningAdvice)环绕增强(MethodInterceptor)异常抛出增强(ThrowsAdvice)

  

  

 

转载于:https://www.cnblogs.com/Tiandaochouqin1/p/10423099.html

你可能感兴趣的文章
centos7没有ifconfig命令
查看>>
10-SAP PI开发手册-ERP发布服务供外围系统调用(RFC类型)
查看>>
cmd命令行查看windows版本
查看>>
城市三联动简单实例
查看>>
opencv边缘检测的入门剖析(第七天)
查看>>
Spring Boot☞ 使用Thymeleaf模板引擎渲染web视图
查看>>
mac本地搭建wordpress
查看>>
CSS3学习手记(2) 伪类选择器
查看>>
DPS首战鞍山
查看>>
Microsoft Sync Framework基础篇 2:Microsoft Sync Framework架构与运行时
查看>>
Git 常用命令大全
查看>>
Xilinx ISE 12.4的简单应用
查看>>
eclipse中访问不了tomcat首页server Locations变灰无法编辑
查看>>
setCharacterEncoding编码问题
查看>>
第190天:js---String常用属性和方法(最全)
查看>>
SQL的六种约束
查看>>
JavaScript-手机中访问页面判断
查看>>
第十次 Scrum Meeting
查看>>
windows Sever 2012下Oracle 12c安装配置方法图文教程
查看>>
python _、__和__xx__的区别
查看>>