【spring】AOP实践[通俗易懂]

【spring】AOP实践[通俗易懂]【spring】AOP实践

大家好,又见面了,我是你们的朋友全栈君。

      spring的AOP操作是通过AspectJ来实现的,AspectJ是一个基于Java语言的AOP框架,Spring2.0以后新增了对AspectJ切点表达式的支持。下面我们就具体介绍一下基于AspectJ的AOP操作。

准备工作

1. 新建一个java项目,导入jar包:

【spring】AOP实践[通俗易懂]

2. 引入约束:

<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/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
</bean>

3. 新建增强类(Book)和被增强的类(MyBook)

public class Book {

	public void add(){
		System.out.println("add.......");
	}
}
public class MyBook {

	public void before(){
		System.out.println("前置增强.....");
	}
	
	public void after(){
		System.out.println("后置增强.....");
	}
	
	//环绕增强
	public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
		//方法之前
		System.out.println("方法之前.....");
		//执行被增强的方法
		proceedingJoinPoint.proceed();
		//方法之后
		System.out.println("方法之后.....");
	}
}

一.配置文件实现AOP操作

        <!-- 1.配置对象 -->
	<bean id="book" class="cn.itcast.aop.Book"></bean>
	<bean id="myBook" class="cn.itcast.aop.MyBook"></bean>
	
	<!-- 2.配置aop操作 -->
	<aop:config>
		<!-- 2.1配置切入点 -->
		<aop:pointcut expression="execution(* cn.itcast.aop.Book.*(..))" id="pointcut1"/>
		<!-- 2.2配置切面 
		     把增强用到切面的过程-->
		<aop:aspect ref="myBook">
			<!-- 配置增强类型 
			     method:增强的类里面那个方法作为前置-->
			<aop:before method="before" pointcut-ref="pointcut1"/>
			<aop:after-returning method="after" pointcut-ref="pointcut1"/>
			<aop:around method="around" pointcut-ref="pointcut1"></aop:around>
		</aop:aspect>
	</aop:config>

   

调用book对象的add方法,输出结果如下:

【spring】AOP实践[通俗易懂] 

      通过上面的操作,我们可以看出,通过配置文件来实现AOP操作时,首先创建类的对象,然后进行配置aop的操作:配置切入点和切面,配置切面的过程中可以配置前置增强、后置增强、换让增强等增强类型。

二.注解实现AOP操作

使用注解实现AOP操作,相对于配置文件的方式就简单了许多,3部就可以实现:

1.创建对象

        <!-- 1.创建对象 -->
	<bean id="book" class="cn.itcast.aop.Book"></bean>
	<bean id="myBook" class="cn.itcast.aop.MyBook"></bean>

2.在spring的核心配置文件中开启aop操作

	<!-- 开启aop操作 -->
	<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

3.在增强的类上面使用注解完成aop操作

@Aspect
public class MyBook {

	//在方法上面使用注解完成增强配置
	@Before(value="execution(* cn.itcast.aop.Book.*(..))")
	public void before(){
		System.out.println("before......");
	}
}

      上面我们用注解实现了前置增强,类似这样的注解还有:@AfterReturning 后置增强、@Around 环绕增强等。

       我们还可以看到,在上面两种方式实现aop操作的过程中,都用到了这样的语句:”execution(* cn.itcast.aop.Book.*(..))”。这个就是execution表达式,用它可以帮助我们配置切入点。基本格式为:

execution(<访问修饰符>?<返回类型><方法名>(参数)<异常>)

常用的execution表达式有:

1. execution(* cn.itcast.aop.Book.add(..)) 

访问修饰符包括private、public等,*代表任意的修饰符。这个表达式的意思就是配置Book类的add方法为切入点。

2. execution(* cn.itcast.aop.Book.*(..)) 

Book类下面的所有方法都可以是切入点

3. execution(* *.*(..)) 

任意类的任意方法是切入点

       刚开始学习aop,缺少项目经验,如果有不对的地方,还请大家多多指教。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105633.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python爬虫入门

    python爬虫入门毕设是做爬虫相关的,本来想的是用java写,也写了几个爬虫,其中一个是爬网易云音乐的用户信息,爬了大概100多万,效果不是太满意。之前听说Python这方面比较强,就想用Python试试,之前也没用过

  • 通过java生成精确到秒的时间戳

    通过java生成精确到秒的时间戳3、Java中的两种获取精确到秒的时间戳的方法:Java中的时间戳的毫秒主要通过最后的三位来进行计量的,我们通过两种不同的方式将最后三位去掉。

  • jquery-uploadfile的使用「建议收藏」

    jquery-uploadfile的使用「建议收藏」jQueryFileUpload是一个Jquery文件上传组件,支持多文件上传、取消、删除,上传前缩略图预览、列表显示图片大小,支持上传进度条显示;支持各种动态语言开发的服务器端。官网链接:点击打开链接特点:拖放支持;上传进度条;图像预览;可定制和可扩展的;兼容任何服务器端应用平台(PHP,Python,RubyonRails,Java,Node.js,Goetc.)。使用方…

  • Attribute meta-data#UMENG_CHANNEL@value at AndroidManifest.xml requires a placeholder substitution b

    Attribute meta-data#UMENG_CHANNEL@value at AndroidManifest.xml requires a placeholder substitution b

  • SSTI完全学习[通俗易懂]

    一、什么是SSTISSTI就是服务器端模板注入(Server-SideTemplateInjection),也给出了一个注入的概念。常见的注入有:SQL注入,XSS注入,XPATH注入,XML注入,代码注入,命令注入等等。sql注入已经出世很多年了,对于sql注入的概念和原理很多人应该是相当清楚了,SSTI也是注入类的漏洞,其成因其实是可以类比于sql注入的。sql注入是从用户获…

  • Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!「建议收藏」

    转载自Git使用教程预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料)一:Git是什么?Git是目前世界上最先进的分布式版本控制系统。工作原理/流程:Workspace:工作区Index/Stage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库二:SVN与Git的最主要的区别?SVN是集中式版本控制系统,版本库是集中放在中央…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号