`
garrincha
  • 浏览: 13457 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

6Spring AOP 盗梦空间之一—— before和after

阅读更多
现在我们开始聊聊AOP
各位应该有看过盗梦空间。
影片开始的时候,莱昂纳多(简称LEO)要盗取日本人斋藤(简称日本人)的信息。
在这里,日本人睡觉的流程和LEO的流程是相互独立的,LEO是需要无声无息(没有发生显式调用)的侵入到日本人的睡觉流程中。
1、使用AOP还需要导入更多的包,这里我们总共需要6个包
aspectjweaver  aspectjrt  spring spring-aspects common-annotations commons-logging cglib-nodep
见图


2、新建类Person,包com.spring.service
代码如下
package com.spring.service;

import org.springframework.stereotype.Component;


@Component
public class Person {

	public void haveSleep()
	{
		System.out.println(this.getClass().getName());
		System.out.println("睡着了");
		System.out.println("睡醒了");
	}
}

这里我们使用注释的方式进行自动装配,所以Person类上需要做Component注释,我们之后会在haveSleep方法上做拦截。


3、新建类LeoIncept用于表示LEO的盗梦空间
package com.spring.aop;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LeoIncept {

	@Before("execution(public void com.spring.service.Person.haveSleep())")
	public void beforeSleep()
	{
	    
		System.out.println(this.getClass().getName());
		System.out.println("马上要睡着了,开始编织梦境");
	}
	@After("execution(public void com.spring.service.Person.haveSleep())")
	public void afterSleep()
	{
		System.out.println(this.getClass().getName());
		System.out.println("醒了,赶快圆梦撤退");
	}
	
}

首先LEOIncept类需要加Aspect注释,表示这是一个切面,用于向其他的方法插入本类。
Component注释表示使用Spring装配为一个类。

方法beforeSleep是一个切入的业务,切入点在Person类的haveSleep方法。@Before表示在haveSleep方法之前执行。
afterSleep方法同理。
这样实现的效果是
1执行LeoIncept beforeSleep
2执行Person haveSleep
3执行 afterSleep

4、xml文件
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans  
            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-2.5.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
            >
            <context:component-scan base-package="com.spring"></context:component-scan>
            <context:annotation-config></context:annotation-config>
            <aop:aspectj-autoproxy></aop:aspectj-autoproxy>            
</beans>

xml中多了很多AOP的内容。
5、测试类PersonTest包com.spring.service.test
package com.spring.service.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.service.Person;

public class PersonTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		ApplicationContext ctx = new ClassPathXmlApplicationContext("springbeans.xml");
		Person person = (Person) ctx.getBean("person");
		
		person.haveSleep();
		
	}

}


所有的代码中并没有显示的调用beforeSleep和afterSleep
最后看看执行结果吧
com.spring.aop.LeoIncept
马上要睡着了,开始编织梦境
com.spring.service.Person
睡着了
睡醒了
com.spring.aop.LeoIncept
醒了,赶快圆梦撤退
  • 大小: 23.9 KB
分享到:
评论

相关推荐

    7Spring AOP盗梦空间之二——获得返回值AfterReturnning

    通过阅读《Spring AOP盗梦空间之二——获得返回值AfterReturnning》这篇博文(链接:https://garrincha.iteye.com/blog/2111779),你可以获得更详细的实践指导和示例代码。同时,结合提供的压缩包文件"Spring_AOP_...

    9Spring AOP 盗梦空间之四——Around

    "9Spring AOP 盗梦空间之四——Around"这个标题暗示我们将深入探讨Spring AOP中的一个关键概念——环绕通知(Around Advice)。环绕通知是Spring AOP中功能最全面的通知类型,它提供了对方法执行前、执行后以及异常...

    8Spring AOP盗梦空间之三 ——AfterThrowing

    Spring AOP支持五种通知类型:前置通知(Before)、后置通知(After)、返回通知(After Returning)、异常通知(After Throwing)和环绕通知(Around)。 `AfterThrowing`通知在方法抛出异常时执行,它允许我们在...

    spring aop jar 包

    Spring AOP支持五种类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 3. **切点(Pointcut)**:切点是程序执行过程中的...

    死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序.pdf

    Spring AOP 是一种面向切面编程的技术,它允许我们在不修改源代码的情况下,对应用程序的特定部分(如方法调用)进行增强。在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态...

    五、Spring源码分析——Spring Aop

    《Spring AOP 源码分析》 在深入探讨Spring AOP之前,我们先要理解AOP(面向切面编程)的基本概念。...通过阅读和理解Spring AOP的源码,开发者可以更好地控制和定制AOP行为,从而提升应用程序的性能和设计质量。

    简单spring aop 例子

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...

    spring aop依赖jar包

    总的来说,Spring AOP提供了一种强大的机制,帮助开发者在不侵入业务逻辑的情况下,管理和控制横切关注点。正确理解和使用这些jar包,能让你的项目更加灵活、可维护,同时也提高了代码的复用性。

    Spring AOP 16道面试题及答案.docx

    Spring AOP,全称为Aspect Oriented Programming,是面向切面编程的一种编程范式,它是对传统的面向对象编程(OOP)的一种补充。在OOP中,核心是对象,而在AOP中,核心则是切面。切面是关注点的模块化,即程序中的...

    Spring AOP完整例子

    Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过插入切面来增强或改变程序的行为。在本教程中,我们将深入探讨Spring AOP的不同使用方法,包括定义切点、通知类型...

    Spring AOP面向方面编程原理:AOP概念

    3. **灵活的通知模型**:Spring AOP提供了多种类型的通知,包括around、before、after returning、after throwing等,使得开发者可以根据实际需求选择最适合的通知类型。 4. **丰富的切入点表达式语言**:Spring ...

    征服Spring AOP—— Schema

    本文将深入探讨“Spring AOP——Schema”,这是Spring AOP的一种配置方式,通过XML schema定义切面和通知。 首先,我们需要理解AOP的基本概念。面向切面编程是一种编程范式,旨在提高软件的模块化程度,将关注点...

    Spring 入门案例——AOP

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来实现横切关注点,如日志、事务管理、性能监控等。本入门案例将帮助你理解并掌握Spring AOP的基本概念和使用方法。 在...

    Spring Aop四个依赖的Jar包

    Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的一个重要模块,它通过提供声明式的方式来实现面向切面编程,从而简化了应用程序的开发和维护。在Spring AOP中,我们无需深入到每个...

    Spring AOP实现机制

    Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的可复用性和可维护性。 ### 1. ...

    spring aop spring aop

    在给出的XML配置中,`&lt;aop:config&gt;`元素开启AOP支持,而`&lt;aop:aspect&gt;`元素用于定义切面,其内部通过`&lt;aop:pointcut&gt;`定义切点,并通过`&lt;aop:before&gt;`和`&lt;aop:after&gt;`指定通知。 为了使用这些配置,我们需要在代码...

    spring之AOP(动态代理)

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。AOP的核心概念是切面、通知、连接点、切入点和织入。在...

    spring-aop.jar各个版本

    spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...

    spring aop的demo

    在Spring AOP中,切面通常由一个或多个通知(advises)组成,包括前置通知(before)、后置通知(after)、环绕通知(around)、异常通知(after throwing)和最终通知(after returning)。 接下来,我们将重点...

Global site tag (gtag.js) - Google Analytics