利用反射手写代码实现spring AOP

前言:上一篇博客本身动手编写spring IOC源码受到了你们的热情关注,在这里博客十分感谢。特别是给博主留言建议的@玛丽的竹子等等。本篇博客咱们继续,仍是在原有的基础上进行改造。下面请先欣赏一下博主画的一张aop简图(没有艺术天分,画的很差莫见怪)html

解析:每每在咱们的系统的多个核心流程中会有一部分与之关系不大的相同的横切流程,例如权限认证,事务管理。所以咱们通常会抽象出这些相同的比较次要的交给spring aop的Handler来统一处理这些横切流程也就是上图中绿色部分。接下来咱们看一下本例结构图:spring

解析:1,咱们的Hostess对象是Master接口的实现,主要实现了WalkDog()和shopping()两个方法,而WalkDog()方法则是调用的是Dog接口的实现类的bark()方法。app

2,咱们整个程序的入口Client调用的Hostess对象的两个核心方法,HumanHandler处理的Hostess对象的横切流程。框架

复制代码
 1 public class Client {
 2 
 3     public static void main(String[] args) {
 4         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 
 5         
 6         Master master = (Master)context.getBean("humanProxy");
 7         
 8         System.out.println("");
 9         System.out.println("");
10         System.out.println("");
11         System.out.println("");
12         
13         master.shopping();
14         master.WalkDog();
15         
16     }
17 }
复制代码
复制代码
 1 package human;
 2 
 3 import dog.Dog;
 4 
 5 public class Hostess implements Master {
 6     
 7     private Dog dog;
 8     
 9     public void setDog(Dog dog) {
10         this.dog = dog;
11     }
12     
13     @Override
14     public void WalkDog() {
15 
16         dog.bark();
17     }
18     
19     @Override
20     public void shopping(){
21         System.out.println("疯狂购物中");
22     }
23 
24 }
复制代码

解析:经过以上代码咱们不难发现咱们的程序只是调用核心业务,而每每核心业务的周围有不少繁琐的相对于比较次要的横切业务。利用本例中遛狗,购物以前,咱们须要再家作一些前提准备。例如:整理一下着装,锁上房门等等,回家以后有须要换鞋之类的。所以咱们还须要一个handler来处理这些业务。ide

 View Code

解析:有了handler咱们还须要一个代理工厂学习

 View Code

接下来咱们来看一下本例的具体配置this

 View Code

最后一步也是关键,本类中使用到的实例须要咱们经过读取上面这份配置文件而后经过反射构造出来。代理

 View Code

下面是运行结果xml

总结:1 spring aop将咱们的系统分为两部分,一核心业务,二横切业务。咱们的只需关注核心业务,横切业务统一交给代理去处理。htm

2 本例依旧是利用反射调用横切方法实现aop,仍是那句话,咱们本身写的天然是漏洞百出,只是为了说明问题。做为一个开源的框架,若是对spring源码感兴趣的朋友能够自行查看。

另:博主的我的博客也在努力搭建中,欢迎与各位学习交流,谢谢!我的博客地址:http://www.singletonh.top/

相关文章
相关标签/搜索