【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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 机器人视觉软件工程师_机器视觉工程师能干到多少岁

    机器人视觉软件工程师_机器视觉工程师能干到多少岁  大家好,本人是刚刚入职的视觉工程师,现在已经一年了,也给大家分享一下在这一段时间里,我做了什么,以及学到了什么。对了,虽然我只做了两个月的视觉工程师,但是我已经连续写了12年的日记了,我想把这个好习惯一直延续下去,也算是做个记录。可能没有人看,只做个人消遣吧!2020.9.15  先讲一下我的个人情况吧,大学是在湖南省湘潭市读的,在大四的时候遇到了一个好的老师,领我上了计算机视觉的末班车,为我拨开本来迷茫如雾的未来,在毕业后只身踏入计算机视觉漫漫长征路。其实坦白来讲,我是打算在毕业后做一名

    2022年9月23日
    3
  • iOS逆向入门实践 — 逆向微信,伪装定位(一)「建议收藏」

    iOS逆向入门实践 — 逆向微信,伪装定位(一)「建议收藏」ios微信定位,tweak,iosreverse

    2022年6月5日
    40
  • 用户认证–auth模块实现

    转载文章,如有不妥之处请谅解相关介绍authauth模块是Django提供的标准权限管理系统,可以提供用户身份认证,用户组和权限管理。auth可以和admin模块配合使用,快速建立网站的管

    2022年3月29日
    47
  • 神经网络 – BP神经网络与RBF神经网络模型解决实际问题 – (Matlab建模)

    神经网络 – BP神经网络与RBF神经网络模型解决实际问题 – (Matlab建模)目录神经网络模型简述实例:交通运输能力预测设计MATLAB程序及仿真结果由于货物运输、地方经济及企业发展的紧密联系,因此作为反映货物运输需求的一项重要指标,货运量预测研究和分析具有较强的实际意义。常用的货运量预测方法包括时间序列方法、移动平滑法、指数平滑和随机时间序列方法、相关(回归)分析法、灰色预测方法和作为多种方法综合的组合预测方法等.这些方法大都集中在对…

    2025年7月2日
    3
  • js 访问asmx接口「建议收藏」

    js 访问asmx接口「建议收藏」用C#写了一个接口,js需要用ajax访问varjsonObj=newObject();jsonObj[‘cid’]=cid;$.ajax({type:”POST”,url:”/tv/hub.asmx/getDeviceLogs”,data:JSON.string…

    2022年6月10日
    60
  • CLion 激活码 2021 8月(JetBrains全家桶)「建议收藏」

    (CLion 激活码 2021 8月)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1STL5S9V8F-eyJsaWNlbnNlSWQiOi…

    2022年3月27日
    98

发表回复

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

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