时间:2021-05-19
在阅读本文之前,大家可先行参阅《简单理解Spring之IOC和AOP及代码示例》一文,简单了解下ioc和aop的相关内容。下面进入正题。
本文将会一步一步创建一个最简单的例子,来使用Spring的AOP特性,算是一个Spring AOP的入门Demo。作为一个初学者,运行出这么简单的一个Demo也踩了很多的坑。
OOP的问题,AOP的补充
当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。
所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
Spring中对AOP的支持
Spring中AOP代理由Spring的IoC容器负责生成、管理,其依赖关系也由IoC容器负责管理。因此,AOP代理可以直接使用容器中的其他Bean实例作为目标,这种关系可由IoC容器的依赖注入提供。Spring默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了。当需要代理的类不是代理接口的时候,Spring自动会切换为使用CGLIB代理,也可强制使用CGLIB。
本例子的逻辑如下:有一个Car类(业务类),在Car类中的go方法运行之前和之后,都会有相应的日志记录,但Car类本身并不知道日志的任何逻辑。
创建Maven项目并添加依赖
首先,新建一个Maven项目,使用 maven‐archetype‐quickstart模板,然后打开pom.xml文件,加入Spring AOP运行需要的依赖包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.0.5.RELEASE</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.0.5.RELEASE</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.0.5.RELEASE</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.0.5.RELEASE</version></dependency><dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.1</version></dependency>编写业务代码
新增一个业务类Car,包含一个go()方法
package com.wowo.spring_aop_demo1;public class Car { public void go(){ System.out.println("go go go!"); }}编写切面类
日志类会记录下系统的运行情况,但日志的逻辑不会在业务类中写的到处都是,而是作为一个切面类存在。
package com.wowo.spring_aop_demo1;public class CarLogger { public void beforeRun(){ System.out.println("car is going to run"); } public void afterRun(){ System.out.println("car is running"); }}该切面类包含两个方法,他们分别是前置通知和后置通知。
通过bean来配置关联
新增一个配置文件,本例命名为bean.xml,在配置文件中来关联切面与通知
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://.wowo.spring_aop_demo1.Car.go(..))" id="go"/> <aop:around method="aroundRun" pointcut-ref="go"/> </aop:aspect> </aop:config>注意:环绕通知不能和前置/后置通知同时存在。运行代码后,输出结果不变。
总结
以上就是本文关于Spring AOP入门Demo分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
spring对AOP的实现提供了很好的支持。下面我们就使用Spring的注解来完成AOP做一个例子。首先,为了使用Spring的AOP注解功能,必须导入如下几个
Spring.Net包括控制反转(IoC)和面向切面(AOP),这篇文章主要说下IoC方面的入门。一、首先建立一个MVC项目名称叫SpringDemo,然后用N
目前整个开发社区对AOP(AspectOrientedPrograming)推崇备至,也涌现出大量支持AOP的优秀Framework,--Spring,JAC,
在阅读本文之前,大家可先参阅《简单理解Spring之IOC和AOP及代码示例》一文,了解下Spring中IOC和AOP的相关内容。下面进入正题。本篇文章介绍在S
Spring框架。和Struts框架一样,Spring其实也是开源框架,它是RodJohnson创造出来的,由AOP与IOC两个部分组成。AOP指的是面向方面编