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


相关推荐

  • 60道计算机网络面试题(附答案,背诵版)

    60道计算机网络面试题(附答案,背诵版)在大概三个月前,我在我网站就整理了计算机网络的面试题了,不过那时候才整理了20道核心的,大概过了两个月,我花了大半天去找计算机网络的面试题,因为20道肯定不够,于是我整理到了42道。不过最近我不是在整理各个公司的面经嘛?发现42道还是漏掉了不少,于是这周就又把自己整理面经看到的计算机网络面试题又补上了,一共60多道。只要把这些面试题拿下,计算机网络基本就差不多了,面试题如下?1.OSI的七层模型分别是?各自的功能是什么?2.为什么需要三次握手?两次不行?3.为什么需要四次

    2022年6月24日
    25
  • Docker安装RabbitMQ教程「建议收藏」

    Docker安装RabbitMQ教程「建议收藏」本章教程介绍如何利用Docker快速搭建RabbitMQ环境。目录一、拉取镜像二、运行容器三、访问测试一、拉取镜像dockerpullrabbitmq:3.7.7-management二、运行容器dockerrun-d–namerabbitmq3.7.7-p5672:5672-p15672:15672-v`pwd`/data:/var/lib/rabbitmq–hostnamemyRabbit-eRABBITMQ_DEFAUL..

    2022年5月23日
    37
  • Android控件-TabLayout使用介绍

    Android控件-TabLayout使用介绍TabLayout简述简单示例属性介绍tabIndicatorFullWidthtabRippleColortabTextAppearancetabModetabIndicatorColortabIndicatorHeighttabIndicatorGravity简述TabLayout是Androidsupport中的一个控件android.support.design.widget.Tab…

    2022年5月6日
    64
  • VS2008 WEB组件安装失败——解决办法[通俗易懂]

    VS2008 WEB组件安装失败——解决办法[通俗易懂]    最近在安装SqlServer2008R2时意外失败,错误从来没见过,原因无从查起。于是卸载了VisualStudio2008,然后把数据库和VS2008都重新装一遍,谁知道VS2008安装时竟然失败了,提示“WEB组件安装失败”。在网上查了下原因,很多人说的都是废话,结合部分有用的意见,我尝试了如下解决办法:  1、根据提示,是第一个组件“VisualStudioWeb…

    2025年8月26日
    11
  • linux tomcat自动重启(linux重启服务命令)

    在Linux系统下,重启Tomcat使用命令操作的!首先,进入Tomcat下的bin目录cd/usr/local/tomcat/bin使用Tomcat关闭命令./shutdown.sh查看Tomcat是否以关闭ps-ef|grepjava如果显示以下相似信息,说明Tomcat还没有关闭root1297610Sep01?00:10:22/u…

    2022年4月18日
    148
  • spring框架常用的注解_springmvc中注解的作用

    spring框架常用的注解_springmvc中注解的作用一、Spring常用注解Spring常用注解(绝对经典)二、Jpa1、@Entity,@Table(name=””)表明这是一个实体类,一般用于jpa,这两个注解一块使用,但是如果表名和实体类名相同的话,@Table可以省略。2、@MappedSuperClass基于代码复用和模型分离的思想,在项目开发中使用jpa的@MappedSuperClass注解,将实体类的多个属性分别封装到不同的非实体类中。例如,数据库表中都需要id来表示编号,id是这些映射实体类的通用属性,交给jpa统

    2025年8月20日
    3

发表回复

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

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