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


相关推荐

  • mysql的索引有哪几种_MySQL索引数据结构

    mysql的索引有哪几种_MySQL索引数据结构摘要腾兴网为您分享:mysql索引类型有哪些,易信,微商助手,刷机精灵,数字涂色等软件知识,以及家校即时通,内部通讯录,叫叫识字大冒险,天天酷跑,手机电视高清直播,短信验证软件,诛仙表情包,一手女装,iis7,instagram视频,搭建卡盟主站,umbrella,qq音乐qmc0格式,图片降噪,钢筋锈蚀检测仪等软件it资讯,欢迎关注腾兴网。介绍各种类型的mysql索引。1、普通索引普通索引…

    2022年8月12日
    3
  • 【mysql 清空数据】清除mysql表中数据「建议收藏」

    【mysql 清空数据】清除mysql表中数据「建议收藏」主要命令有两种,一种是delete方式,一种是truncatetable方式。deletefrom表名;truncatetable表名;不带where参数的delete语句可以删除mysql表中所有内容,使用truncatetable也可以清空mysql表中所有内容。效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据

    2022年5月22日
    34
  • TD-SCDMA特点_TDD-LTE

    TD-SCDMA特点_TDD-LTETD-SCDMA的提出比其他标准较晚,这给其产品成熟性带来一定的挑战,但在另一方面,TD-SCDMA吸纳了九十年代以来移动通信领域最先进的技术,在一定程度上代表了技术的发展方向,具有前瞻性和强大的后发优势。与其他3G标准相比,TD-SCDMA系统及其技术有着如下突出优势:  频谱效率高  TD-SCDMA系统综合采用了联合检测、智能天线和上行同步等先进技术,系统内的…

    2022年10月3日
    2
  • unsigned int数据范围16位_unsigned int几个字节

    unsigned int数据范围16位_unsigned int几个字节提到unsigned,大家应该都了解,有朋友问c语言中unsigned什么意思,还有人想问c语言中的unsigned是什么意思,这到底是咋回事?事实上unsigned呢,下面是小编推荐给大家的unsignedint,下面我们一起来看看吧!unsignedint一、指代不同1、int:定义整数类型变量的标识符。2、unsignedint:需声明无符号类型的话就需要在类型前加上unsigned。…

    2022年9月20日
    3
  • 文件删除不掉:0X80070570解决办法

    文件删除不掉:0X80070570解决办法nbsp nbsp nbsp nbsp nbsp 今天在 linux 下拷东西 因为有急事所以强制拔掉了硬盘 结果就出现文件夹删不掉的情况 采用 Ultral 试试的时候获得了错误码 0X 这样就好办了 搜索了几下就得到了解决办法 右键硬盘选择工具检查磁盘 然后再进入硬盘删除该文件夹 成功解决 其实很简单

    2025年7月8日
    1
  • VMware的虚拟机连不上网

    VMware的虚拟机连不上网1.如果你发现在VMware下运行的虚拟机无法连接网络,那下面的方法也许可以帮到你。(前提是你的物理网络是通的)第一步:在VMware界面下单击“编辑“→”虚拟网络编辑器”第二步:单击”更改设置”获取权限,如果有。则不需要单击第三步:单击左下角的”恢复默认设置“,等待完成,然后确定退出。第四步:刚刚恢复默认后有两个,你自己…

    2022年6月26日
    21

发表回复

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

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