Spring AOP的一个简单实现
针对学习笔记(六)中的购买以及退货代码,我们加入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的一个简单实现相关推荐
- Spring AOP 简介以及简单用法
Spring AOP 简介以及简单用法 如果你去面试java开发, 那么Spring的AOP和DI几乎是必问的问题. 那么AOP是什么呢? 一. AOP 所谓Aop就是 Aspect-Oriented ...
- 阿里微服务专家自己手写Spring Boot 实现一个简单的自动配置模块
为了更好的理解 Spring Boot 的 自动配置和工作原理,我们自己来实现一个简单的自动配置模块. 假设,现在项目需要一个功能,需要自动记录项目发布者的相关信息,我们如何通过 Spring Boo ...
- 使用React和Spring Boot构建一个简单的CRUD应用
"我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. Reac ...
- 使用spring boot实现一个简单的项目——⽤户管理功能
Spring Boot之用户管理功能 趁着这几天有时间跟大家分享一个使用spring boot实现的一个简单的项目,也开启了我第一次在CSDN上面写博客,相信这是个新的篇章.好了,废话不多说,直接上真 ...
- 课表排班java_初学OptaPlanner-02- 基于Spring Boot实现一个简单课程表排班的实例
Spring Boot Java quick start 01. 排班目标 作出一个简单的课程表timetable,示例如下: 时间表的类图 02. Opta的常用注解说明, 关键实体类说明 @Pla ...
- Spring AOP的一个具体例子
新建一个Logging类: 我希望我的业务类的Java代码的方法,在执行前,执行后,返回方法后,以及抛出异常后,能够执行一些hook代码.这些hook代码就写在这个Logging类的对应方法里: be ...
- aopaspect区别_面试官:什么是AOP?Spring AOP和AspectJ的区别是什么?
AOP(Aspect Orient Programming),它是面向对象编程的一种补充,主要应用于处理一些具有横切性质的系统级服务,如日志收集.事务管理.安全检查.缓存.对象池管理等. AOP实现的 ...
- 基于Spring AOP实现权限控制
基于Spring AOP实现一个简单的接口权限 1.定义自定义注解 //注解的作用类型:方法.类 @Target({ElementType.METHOD,ElementType.TYPE}) @Ret ...
- 如何利用spring框架来开发一个简单的小项目——书店项目
这里我将用spring来开发一个简单的书店项目 Step1:所用到的开发软件为 idea , 所用到的jar包为 这些jar的下载可在 官网 下载,选择5.2.6版本下载,不会的在下面评论私信 Ste ...
最新文章
- python 列表维度_如何输出python中list的维度
- extract ,eval的用法
- 基于JSP的开题报告定做
- 重磅风控干货:如何用数据分析监测交易欺诈
- c语言中式如何定义变量,“新中式”住宅该怎样定义?这场跨界对话给你看建发的答案...
- PyQt5 笔记5 -- 消息框(QMessageBox)
- 大数据互联网架构 tomcat集群配置时三个端口的作用
- JLabel跟label
- 【数论】GCD(P2568)
- 面趣 | 马云在面试中出的一道题,据说只有一个人答对……
- 为什么选择Bootstrap
- FPGA复位激励编写(方法二)
- qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in问题
- 解读后天性学者症候群:怎么一闷棍砸出个天才?
- opencv 阈值处理(python)
- 北京理工大学计算机面试题,北京理工大学自主招生面试试题综合素质答案技巧.doc...
- VB代码窗口鼠标滚轮的使用
- Meta-learning algorithms for Few-Shot Computer Vision 论文解读(二)
- Win10电脑下载软件有绑定软件怎么删除
- ionic:点击某个商品名称,跳转到相应的商品详情页面