针对学习笔记(六)中的购买以及退货代码,我们加入AOP框架,实现同样一个功能。

首先配置XML:service采用和之前一样的代码,只是没有通过实现接口来实现,而是直接一个实现类。transactionManager依旧为之前的事务管理器。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd "><!-- 业务类 --><bean id="service" class="aop_part.Demo2.GodService"></bean><!-- 切面类 --><bean id="transactionManager" class="aop_part.Demo1.TransactionManager"></bean><!-- 切入点 --><aop:config><aop:aspect id="transactionAspect" ref="transactionManager"><aop:before method="transaction_start"pointcut="execution(* aop_part.Demo2.*Service.*(..))"/><aop:after-returning method="transaction_submit"pointcut="execution(* aop_part.Demo2.*Service.*(..))"/><aop:after-throwing method="transaction_rollback"pointcut="execution(* aop_part.Demo2.*Service.*(..))"/></aop:aspect></aop:config></beans>

我们通过再xml中配置aop参数,实现了将事务操作插入到service的前中后中。

写一个Text类,来观察输出的结果:

package aop_part.Demo2;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Created by Richard on 2017/7/28.*/
public class test {public static void main(String[] args) {ApplicationContext context=new ClassPathXmlApplicationContext("aop_part/Demo2/aop_Context.xml");GodService godService= (GodService) context.getBean("service");System.out.println(godService.getClass().getName());godService.buy("rekent","AOP_Study");godService.returnGod(1100);}
}

结果和预期一样,与之前是一致的:

aop_part.Demo2.GodService$$EnhancerBySpringCGLIB$$3f2fc81
【事务开始】用户rekent购买了AOP_Study
【事务提交】
【事务开始】订单1100申请退回
【事务提交】Process finished with exit code 0

与此同时,Spring 框架通过Java SE动态代理和cglib来实现AOP功能:

  当明确指定目标类实现的业务接口时,Spring采用动态代理,也可以强制使用cglib

  当没有指定目标类的接口时,Spring使用cglib进行字节码增强。

  此处由于没有申明接口,所以Spring采用cglib来实现AOP,我们通过反射获取到了cglib动态生成的代理对象的类名,即aop_part.Demo2.GodService$$EnhancerBySpringCGLIB$$3f2fc81

转载于:https://www.cnblogs.com/rekent/p/7251521.html

Spring AOP的一个简单实现相关推荐

  1. Spring AOP 简介以及简单用法

    Spring AOP 简介以及简单用法 如果你去面试java开发, 那么Spring的AOP和DI几乎是必问的问题. 那么AOP是什么呢? 一. AOP 所谓Aop就是 Aspect-Oriented ...

  2. 阿里微服务专家自己手写Spring Boot 实现一个简单的自动配置模块

    为了更好的理解 Spring Boot 的 自动配置和工作原理,我们自己来实现一个简单的自动配置模块. 假设,现在项目需要一个功能,需要自动记录项目发布者的相关信息,我们如何通过 Spring Boo ...

  3. 使用React和Spring Boot构建一个简单的CRUD应用

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. Reac ...

  4. 使用spring boot实现一个简单的项目——⽤户管理功能

    Spring Boot之用户管理功能 趁着这几天有时间跟大家分享一个使用spring boot实现的一个简单的项目,也开启了我第一次在CSDN上面写博客,相信这是个新的篇章.好了,废话不多说,直接上真 ...

  5. 课表排班java_初学OptaPlanner-02- 基于Spring Boot实现一个简单课程表排班的实例

    Spring Boot Java quick start 01. 排班目标 作出一个简单的课程表timetable,示例如下: 时间表的类图 02. Opta的常用注解说明, 关键实体类说明 @Pla ...

  6. Spring AOP的一个具体例子

    新建一个Logging类: 我希望我的业务类的Java代码的方法,在执行前,执行后,返回方法后,以及抛出异常后,能够执行一些hook代码.这些hook代码就写在这个Logging类的对应方法里: be ...

  7. aopaspect区别_面试官:什么是AOP?Spring AOP和AspectJ的区别是什么?

    AOP(Aspect Orient Programming),它是面向对象编程的一种补充,主要应用于处理一些具有横切性质的系统级服务,如日志收集.事务管理.安全检查.缓存.对象池管理等. AOP实现的 ...

  8. 基于Spring AOP实现权限控制

    基于Spring AOP实现一个简单的接口权限 1.定义自定义注解 //注解的作用类型:方法.类 @Target({ElementType.METHOD,ElementType.TYPE}) @Ret ...

  9. 如何利用spring框架来开发一个简单的小项目——书店项目

    这里我将用spring来开发一个简单的书店项目 Step1:所用到的开发软件为 idea , 所用到的jar包为 这些jar的下载可在 官网 下载,选择5.2.6版本下载,不会的在下面评论私信 Ste ...

最新文章

  1. python 列表维度_如何输出python中list的维度
  2. extract ,eval的用法
  3. 基于JSP的开题报告定做
  4. 重磅风控干货:如何用数据分析监测交易欺诈
  5. c语言中式如何定义变量,“新中式”住宅该怎样定义?这场跨界对话给你看建发的答案...
  6. PyQt5 笔记5 -- 消息框(QMessageBox)
  7. 大数据互联网架构 tomcat集群配置时三个端口的作用
  8. JLabel跟label
  9. 【数论】GCD(P2568)
  10. 面趣 | 马云在面试中出的一道题,据说只有一个人答对……
  11. 为什么选择Bootstrap
  12. FPGA复位激励编写(方法二)
  13. qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in问题
  14. 解读后天性学者症候群:怎么一闷棍砸出个天才?
  15. opencv 阈值处理(python)
  16. 北京理工大学计算机面试题,北京理工大学自主招生面试试题综合素质答案技巧.doc...
  17. VB代码窗口鼠标滚轮的使用
  18. Meta-learning algorithms for Few-Shot Computer Vision 论文解读(二)
  19. Win10电脑下载软件有绑定软件怎么删除
  20. ionic:点击某个商品名称,跳转到相应的商品详情页面

热门文章

  1. 销售必备心灵鸡汤(转)
  2. react router路径的匹配原则
  3. (转)【javascript基础】原型与原型链
  4. Knockout.js 学习 (六)-- 监控属性数组 applyBinding Observables
  5. ADO.NET Entity Data Model入门实例
  6. js Grid - 列表插件
  7. 谈谈varnish、squid、apache、nginx缓存的对比
  8. 职业生涯又一个转折点
  9. 解决git pull/push每次都需要输入密码问题
  10. leetcode算法题--Is Subsequence