Spring笔记:AOP基础引入AOPSpringIOC相对而言还是比较容易理解的,它是反射技术实现的。SpringAOP,最大的用处是事务的控制,这是最麻烦也是最难理解的东西。 SpringAOP是通过动态代理来实现的。首先在传统MVC架构中,业务层一般都夹带着数据库的事务管理,例如,插入一个角色,它是使用RoleService接口的实现类RoleServerImpl来实现的。
当程序进入到insertRole方法的时候,Spring就会读取配置的传播行为进行设置,这里的配置为Propagation.REQUIRED,它的意思是当前方法如果有事务则加入当前事务,否则就创建新的事务。这样这个insertRole方法就在事务内调用了,那么它是怎么实现的呢? 我们不去描述太过抽象的概念,如切面、连接点、通知、切入点、目标对象、AOP代理等极其抽象的概念,而是从使用原理去讨论他们。 动态代理SpringAOP是动态代理的典范,我们需要先熟悉一下动态代理的相关概念。 Mybatis中,Mapper仅仅是一个接口,而不是一个包含逻辑的实现类,我们知道一个接口是无法去执行的,那么它是如何运行的呢?这不是违反了教科书所说的接口不能运行的道理吗? 答案就是动态代理,不妨先来看一下Mapper到底是什么东西 很显然Mapper产生了代理类,这个代理类是MyBatis为我们创建。 代理模式所谓的代理模式就是在原有的服务上多加了一个占位,通过这个占位去控制服务的访问。
其次,为什么要用代理模式呢?通过代理可以控制如何访问真正的服务对象,提供额外的服务。另外有机会通过重写一些类来满足特定的需要,正如客服也可以根据公司的业务规则,提供一些服务,这个时候就不需要你劳你大驾了。 一般来说,代理分为两种,一种是JDK反射机制提供的代理,另一种是CGLIB代理。 JDK动态代理JDK的动态代理,是由JDK的Java.lang.reflect包提供支持的,我们需要完成几个步骤:
JDK最大的缺点就是需要提供接口,而MyBatis的Mapper就是一个接口它采用的就是JDK的动态代理。我们先给一个服务接口。 public interface HelloService{ public void sayHello(String name); } 然后,写一个实现类 public class HelloServiceImpl implements HelloService{ public void sayHello(String name) { System.out.println("Hello" name); } } 现在我们写一个代理类,提供真实对象的绑定和代理方法。代理类的要求是实现InvocationHandler接口的代理方法。 来源:http://www./content-4-48051.html |
|