博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入理解springAOP
阅读量:4686 次
发布时间:2019-06-09

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

  概念:AOP(Aspect-Oriented Programming)即面向切面编程。它是对传统的OOP(面向对象)编程的一种补充,在OOP中往往一个对象有什么行为我们就定义什么方法,对象与对象之间存在紧密联系。与OOP不同的是AOP更加关注的是切面,我们只需要关注于对象的核心业务而不是所有的业务。

如同上图1中所示,两个螺丝就是一种紧密耦合的关系, 一旦一方存在问题,另一方也必须做出相应调整。而图2为一个笔记本的USB插口,只要符合这个接口的设备都可以使用这个插口。

在程序中也和现实生活一样,使用spring AOP就是一种典型的非耦合案例,AOP的核心之一就是我们的非核心业务与我们的核心业务解耦。

具体实现:(本例我们模拟一个女孩子的日常生活,去KFC,约会,遛狗几个事务)

第一步:既然是使用spring自然要配置相关环境,然后直接写我们的核心业务,而在一个程序中我们在多个流程中反复出现的一些非核心代码抽取出来由代理给我们管理。我们发现这几个事务之前我们的对象(女孩子)都要洗澡,化妆......之后都要卸妆....这些非逻辑业务便是我们需要分离出来的。

1 package aop_demo; 2  3 /* 4  *  5  */ 6 public class Girl1 implements Girl{ 7      8     private Dog dog = null; 9     10     public void setDog(Dog dog) {11         this.dog = dog;12     }13 14     public void KFC(String datetime){15         16         System.out.println("[核心业务逻辑]我是第一个女孩");17         System.out.println("[核心业务逻辑]"+datetime+"吃肯德基");18     }19     20     public void meet(String datetime){21     22         System.out.println("[核心业务逻辑]我是第一个女孩");23         System.out.println("[核心业务逻辑]"+datetime+"约会");24         25     }26 27     29     @Override30     public void playDog() {31         32         dog.bark();33         34     }35 36 }

 本例中的对象还一个dog属性因此我们还一个dog对象以及它的方法

1 package aop_demo; 2  3 public class Dog_taidi implements Dog { 4  5     @Override 6     public void bark() { 7         System.out.println("旺旺,我是泰迪"); 8     } 9 10 }

第二步,统一管理我们的非核心业务也就是代理了。

上图中的通知其本质也就是代理,由于本例中前后都有非核心业务,因此我们选择环绕通知

1 package aop_demo; 2  3 import org.aopalliance.intercept.MethodInterceptor; 4 import org.aopalliance.intercept.MethodInvocation; 5  6  7 public class AroundAdvice implements MethodInterceptor { 8  9     @Override10     public Object invoke(MethodInvocation invocation) throws Throwable {11         12         //前置业务13         System.out.println("[代理执行前置]洗澡");14         System.out.println("[代理执行前置]化妆");15         System.out.println("[代理执行前置]穿衣服");16         System.out.println("*****************");17         18         //核心业务19         Object result = invocation.proceed();20         21         //后置业务22         System.out.println("*****************");23         System.out.println("[代理执行后置]卸妆");24         System.out.println("[代理执行后置]洗澡");25         System.out.println("[代理执行后置]听歌");26         System.out.println("");27         28         return result;29     }30 31 32 }

第三步,配置applicationContext.xml文件

1 
2
15 16
17
18
19
20 21
22
23 24
25 26
27
28
29 30
31 32
33
34
35
36 37 38

第四步,构造我们的测试程序

1 package aop_demo; 2  3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.FileSystemXmlApplicationContext; 5  6 public class Test { 7      8     public static void main(String[] args) { 9         10         ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml"); 11         12         Girl g1 = (Girl)context.getBean("girlProxy");13         14         System.out.println("");15         System.out.println("");16         System.out.println("");17         System.out.println("");18         19         g1.KFC("周日");20         g1.meet("周六");21         //开始遛狗22         g1.playDog();23         24     }25 26 }

 

转载于:https://www.cnblogs.com/zhangyingai/p/7098938.html

你可能感兴趣的文章
MongoDB学习笔记(索引)
查看>>
iOS - UIView
查看>>
VIM7.3设置(for Windows)
查看>>
[bzoj 1143]最长反链二分图最大匹配
查看>>
SpringBoot(一)
查看>>
Azure Powershell script检测登陆并部署ARM Template
查看>>
SSO
查看>>
【LeetCode刷题系列 - 003题】Longest Substring Without Repeating Characters
查看>>
常用git命令
查看>>
深入了解HTTP协议、HTTP协议原则
查看>>
软件开发者最重要的四大技能(转)
查看>>
redis集群【转】
查看>>
get、put、post、delete含义与区别
查看>>
JS中innerHTML,innerText,value区别
查看>>
taglib.jsp
查看>>
Windows平台下使用Beyond Compare作为GIT默认的比对与合并工具
查看>>
Linux常用命令 (1)
查看>>
WinSCP命令行操作
查看>>
十分巧妙的 对话框组件 artDialog
查看>>
java 深入技术一
查看>>