4、Spring AOP样例Demo
目录
简单的介绍一下AOP
使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。
以上一句话源自引入《javaee框架整合开发入门到实践》,简单的解释一下:在系统开发过程中,比方说每个系统都有一个登录模块,登录就是核心关注点,登录之后会有记录数据生成日志,生成日志的功能就是一个横切关注点,并不影响系统功能的实现,但是系统维护又需要这些信息,怎么实现生成日志的功能哪?那就在横切关注点的地方实现。
Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。正如Avanade公司的高级方案构架师Adam Magee所说,AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。”
我的理解:商业逻辑就是核心业务,支持的通用服务比方说生成日志。。。。
实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
使用JDK动态代理实现AOP
1.创建应用
创建一个名为Spring-Test3的Web应用,并导入所需的JAR包。
2.创建接口及实现类
在src目录下,创建一个service包,在该包中创建接口UserService和接口实现类UserServiceImpl。该实现类作为目标类,在代理类中对其方法进行增强处理。
3.创建切面类
在src目录下,创建一个aspect包,在该包中创建切面类MyAspect,在该类中可以定义多个通知(增强处理的功能方法)。
4.创建代理类
在JDK动态代理中,代理类必须实现java.lang.reflect.InvocationHandler接口,并编写代理方法。在代理方法中,需要通过Proxy实现动态代理。在service包中添加MyBeanFactory,在这个类中实现代理类。
注意(回顾java反射机制):
代理类:将目标类(切入点)和 切面类(通知) 结合 --> 切面
Proxy.newProxyInstance
参数1:loader ,类加载器,动态代理类运行时创建,任何类都需要类加载器将其加载到内存。
一般情况:当前类.class.getClassLoader(); 目标类实例.getClass().get...
参数2:Class[] interfaces 代理类需要实现的所有接口
方式1:目标类实例.getClass().getInterfaces() ;
注意:只能获得自己接口,不能获得父元素接口
方式2:new Class[]{UserService.class}
例如:jdbc 驱动 --> DriverManager 获得接口 Connection
参数3:InvocationHandler 处理类,接口,必须进行实现类,一般采用匿名内部提供 invoke 方法,代理类的每一个方法执行时,都将调用一次invoke
参数31:Object proxy :代理对象
参数32:Method method : 代理对象当前执行的方法的描述对象(反射)
执行方法名:method.getName()
执行方法:method.invoke(对象,实际参数)
参数33:Object[] args :方法实际参数
5.创建测试类
在service包中,创建测试类TestMain。在主方法中创建代理对象和目标对象,然后从代理对象中获取对目标对象增强后的对象,最后调用该对象的添加、修改和删除方法。
AspectJ提供的注解实现AOP~~~慢慢更新喽~~~以下可以参考
参考: