4、Spring AOP样例Demo

目录

 

 简单的介绍一下AOP

使用JDK动态代理实现AOP

1.创建应用

2.创建接口及实现类

3.创建切面类

4.创建代理类

5.创建测试类


 

 简单的介绍一下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~~~慢慢更新喽~~~以下可以参考

参考:

  1. https://blog.csdn.net/moreevan/article/details/11977115/
  2. https://blog.csdn.net/zhangliangzi/article/details/52334964
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值