【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,缺少项目经验,如果有不对的地方,还请大家多多指教。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 多个数组合并为一个数组

    多个数组合并为一个数组 constmerge1=arr=&gt;{//合并多个数组constresult=[]for(leti=0;i&lt;arr.length;i++){for(letj=0;j&lt;arr[i].length;j++){…

    2022年6月24日
    31
  • java水仙花数代码,三位四位五位

    java水仙花数代码,三位四位五位ShuiXianHua.javapublicclassShuiXianHua{publicstaticvoidmain(String[]args){for(inti=100;i<1000;i++){intx=i/100;inty=i/10%10;intz=i%10;if(x*x*x+y*y*y+z*z*z==i){

    2022年7月8日
    34
  • 大数据毕业设计 – 选题推荐(一)

    大数据毕业设计 – 选题推荐(一)文章目录1开题指导1.1起因1.2如何避坑(重中之重)1.3为什么这么说呢?1.4难度把控1.5题目名称1.6最后选题建议3最后1开题指导1.1起因近期开题的同学越来越多,很多同学不知道怎么选题,不知道老师分配的题目应该怎么做,指导老师分享的信息不多,无从下手。1.2如何避坑(重中之重)毕设选题实际上对很多同学来说一个大坑,每年挖坑给自己跳的人太多太多,选题选得好后面的答辩以及论文撰写会轻松很多,选的不好就是一个无穷无尽的折磨。。。。1.3为什么这么说呢?其实这主要

    2022年5月25日
    123
  • vscode 前端常用必备插件汇总。「建议收藏」

    vscode 前端常用必备插件汇总。「建议收藏」持续更新,欢迎推荐好的插件。1.vscode基础智能能提示类插件2.vscode美化优化类插件3.vscode各大框架辅助插件4.markdown工具类插件

    2022年7月25日
    21
  • Spring MVC中redirect重定向3种方式(带参数)

    Spring MVC中redirect重定向3种方式(带参数)SpringMVC中做form表单功能提交时,防止用户客户端后退或者刷新时重复提交问题,需要在服务端进行重定向跳转,其中redirect是直接跳转到其他页面,有以下3种方法进行重定向。redirect重定向流程客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,……

    2025年8月23日
    1
  • 海康威视rtsp取流地址(海康威视设置教程)

    RTSP视频流显示(海康威视)VLCSDK(C++)ffmpeg+Nginx本文目的主要是想要在html上实时显示海康威视的摄像头数据,笔者尝试了如下三种方式:VLCSDK(C++)ffmpeg+Nginx下面分别说说通过这几种方式如何实现在web页面上显示。VLC填的地址就是摄像头RTSP视频流地址,然后点串流:左上角是这样的说明就已经在转换了:网页显示注意…

    2022年4月17日
    2.6K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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