`
linliangyi2007
  • 浏览: 1014442 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Spring AOP小例子

阅读更多
PS: 要注明一下,这个是转载滴,之前漏了说鸟,汗死

这里给一个完整的例子,以帮助初学者更好地理解,
你们可以先不必理会上面的概念,等运行这个例子后,再慢慢地做照着理解。

我使用的是Spring 2.0 的AOP, 它引入了一种更加简单并且更强大的方式来定义切面。

马上开始吧:

首先建一个普通Java项目:com.longthsoft.learn.spring

把 spring.jar, commons-logging.jar, cglib-nodep-...jar, aspectjweaver.jar, aspectjrt.jar  放到 Build Path 下.

以止 lib 除了 spring 外, 其他的都可以在 spring 下载包的 lib 中找到

下面编码开始:

让我们先写两个简单的类:

package com.longthsoft.learn.spring.models;  
  
public class A {  
    public void sayHello() {  
        System.out.println("Hello, I'm a");  
    }  
}  

package com.longthsoft.learn.spring.models;  
  
public class B {  
    public void sayHi() {  
        System.out.println("Hi, I'm b");  
    }  
}  

没什么实际的东西, 只是小A和小B在打招呼

接下来把他们交给Spring吧(有点残忍)。

<?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:aop="http://www.springframework.org/schema/aop"  
    xsi:schemaLocation="  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">  
      
    <bean id="a" class="com.longthsoft.learn.spring.models.A" />  
    <bean id="b" class="com.longthsoft.learn.spring.models.B" />  
</beans>

接下来写个Boot
package com.longthsoft.learn.spring;  
  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
  
import com.longthsoft.learn.spring.models.A;  
import com.longthsoft.learn.spring.models.B;  
  
public final class Boot {  
  
    public static void main(String[] args) {  
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");  
        A a = (A) ctx.getBean("a");  
        a.sayHello();  
          
        B b = (B) ctx.getBean("b");  
        b.sayHi();  
    }  
  
}    

嘿, 这里的运行结果不帖了, 大家脑子里闪过即可。

圣诞到了, 小A小B 介绍完自己之后,也应该说句 "Merry Christmas"

Spring 说, 既然你们交给我, 这等 routine 就不用再麻烦了, 直接一并处理掉。

于是:
package com.longthsoft.learn.spring;  
  
import org.aspectj.lang.annotation.AfterReturning;  
import org.aspectj.lang.annotation.Aspect;  
import org.aspectj.lang.annotation.Pointcut;  
  
@Aspect  
public class SimpleAspect {  
  
    @Pointcut("execution(* com.longthsoft.learn.spring.models.*.say*())")  
    public void simplePointcut() { }  
      
    @AfterReturning(pointcut="simplePointcut()")  
    public void simpleAdvice() {  
        System.out.println("Merry Christmas");  
    }  
}

然后修改一下配置文件
<?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:aop="http://www.springframework.org/schema/aop"  
    xsi:schemaLocation="  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">  
      
    <aop:aspectj-autoproxy />  
      
    <bean id="a" class="com.longthsoft.learn.spring.models.A" />  
    <bean id="b" class="com.longthsoft.learn.spring.models.B" />  
      
    <bean id="simpleAspect" class="com.longthsoft.learn.spring.SimpleAspect" />  
</beans> 


OK, 运行一下:

Hello, I'm a
Merry Christmas
Hi, I'm b
Merry Christmas






分享到:
评论
5 楼 kesun_shy 2010-07-29  
简单明了,容易理解!不赖~
4 楼 just4you 2010-04-26  
ronartest 写道

呵呵。最近想用这个aop 在action 层做权限拦截。。

   当用户访问某个方法的时候对他权限进行效验,如果没有这个方法的访问权限 我如何让程序不继续执行这个方法?

为啥不用springsecurity,都有啊。
不用自己再做轮子了吧。
3 楼 ronartest 2010-01-07  

呵呵。最近想用这个aop 在action 层做权限拦截。。

   当用户访问某个方法的时候对他权限进行效验,如果没有这个方法的访问权限 我如何让程序不继续执行这个方法?
2 楼 mfkvfn 2009-12-21  
配置文件都有了,还用什么Annotation?我修改包名修改方法名怎么办?还不如纯配置好。起码能在一个地方进行统一管理。
1 楼 cgxinyan 2009-11-20  
           

相关推荐

    spring AOP 小例子

    在本示例中,我们将通过两个小例子来深入理解Spring AOP的核心概念和使用方法。 首先,我们来看第一个例子——Spring_AOP_Demo01。在这个例子中,我们可能会涉及到以下几个关键知识点: 1. **AOP核心概念**:AOP...

    简单spring aop 例子

    现在,我们来看如何创建一个简单的Spring AOP例子: 1. **定义切面(Aspect)**:切面是包含通知(Advice)和切入点(Pointcut)的类。通知定义了要执行的逻辑,切入点定义了何时执行。例如,我们可以创建一个名为`...

    Spring AOP完整例子

    在Spring AOP的例子中,我们可能会创建一个`@RunWith(SpringJUnit4ClassRunner.class)`标记的测试类,以利用Spring的测试支持。在测试方法中,可以注入需要的bean,然后调用方法来触发AOP代理。这样,通知将在适当的...

    spring的aop简单例子

    这个简单例子将帮助我们理解AOP的基本概念和如何在Spring框架中实现它。 首先,我们要知道AOP的核心概念:切面、通知、连接点、切点、目标对象和代理。切面是包含横切关注点(如日志记录、事务管理等)的模块化组件...

    spring aop 经典例子(原创)

    在这个经典例子中,我们将深入理解Spring AOP的核心概念,并通过实际操作来加深印象。 首先,AOP的核心是切面(Aspect),它封装了横切关注点,如日志记录、事务管理等。在Spring AOP中,切面通常由一个或多个通知...

    SpringAOP的例子

    在这个"SpringAOP的例子"中,我们将深入探讨如何在Eclipse环境下利用Spring AOP和动态代理来实现这些功能。 首先,让我们理解什么是AOP。AOP是一种编程范式,旨在减少代码的重复性和增强可维护性。在传统的OOP中,...

    spring aop简单例子

    现在,我们来看一个简单的Spring AOP例子: 首先,我们需要定义一个切面,包含一个通知。例如,我们创建一个名为`LoggingAspect`的类,其中有一个`logExecutionTime`方法作为前置通知,记录方法的执行时间: ```...

    springAOP演示例子

    这个"springAOP演示例子"很可能会包含一个简单的Spring项目,展示如何创建和配置切面,定义切入点和通知,并观察其在实际代码中的工作原理。通过深入理解和实践这个例子,你可以更好地掌握Spring AOP的使用,提升你...

    spring aop 注解例子

    **Spring AOP 注解例子详解** 在 Spring 框架中,面向切面编程(Aspect Oriented Programming,AOP)是一种强大的设计模式,它允许我们分离关注点,将业务逻辑与系统服务(如日志、事务管理等)解耦。在 Spring AOP...

    spring aop例子

    在"spring aop例子"中,我们可以看到`src`目录,这个通常包含Java源代码,其中可能包含了切面类、通知方法以及使用了切面的业务逻辑类。`extjstest`可能是测试目录,用于验证AOP配置和功能是否正确工作。`QQ五笔截图...

    Spring 2.5 AOP 例子

    Spring 2.5 AOP(面向切面编程)...综上所述,Spring 2.5 AOP例子展示了如何利用类扫描和XML配置实现面向切面编程。通过理解这些概念和实践,我们可以更高效地管理和维护我们的应用程序,使其更具可扩展性和可维护性。

    Spring AOP例子实现源码

    在`springAop`目录下,你应该会看到如`LoggingAspect.java`这样的源码文件,它实现了切面逻辑。此外,可能还有一个`Main`类用于启动应用程序并演示AOP如何工作。通过运行这个示例,你可以观察到切面是如何在运行时...

    spring aop的demo

    在`springAop1`这个压缩包中,可能包含了一个简单的应用示例,展示了如何定义一个切面类,以及如何在该类中定义通知方法。例如,我们可能会看到一个名为`LoggingAspect`的类,其中包含了`@Before`注解的方法,用于在...

    Spring AOP 的实现例子(基于XML配置实现)

    Spring AOP,即Spring的面向切面编程,是Spring框架中的一个重要组成部分,它提供了一种在不修改原有代码的情况下,对程序进行功能增强的技术。在实际开发中,我们经常使用AOP来处理如日志记录、事务管理、权限校验...

    Spring AOP 日志管理 实例

    Spring AOP 日志管理 实例LoggingThrowsAdvice.java

    spring aop spring aop

    在上述例子中,运行时织入通过Spring的ApplicationContext来实现。 5. **代理(Proxy)**:Spring AOP通过动态代理机制创建目标对象的代理,代理对象在调用目标方法时会自动插入切面逻辑。在Java项目中,Spring可以...

    springAop的配置实现

    **Spring AOP 配置实现详解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它允许我们通过分离关注点来简化应用程序的开发。在传统的面向对象编程中,业务逻辑与日志记录...

    Spring AOP简单demo

    **Spring AOP 简介** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要模块,它扩展了传统的面向对象编程,允许开发者定义“横切关注点”(cross-cutting concerns),如日志、事务...

    spring aop 自定义切面示例

    在Spring AOP(面向切面编程)中,自定义切面是实现业务逻辑解耦、增强代码可维护性的重要手段。AspectJ是一个强大的面向切面的编程库,它提供了与Spring AOP集成的能力,使我们可以编写更为灵活和模块化的代码。...

    Spring.net Aop 例子

    通过这个例子,你可以学习到如何在Spring.NET环境中实现AOP,理解动态代理的工作原理,并掌握如何在实际项目中应用AOP来提高代码的灵活性和可维护性。这将有助于你编写更加模块化、易于维护的软件系统。

Global site tag (gtag.js) - Google Analytics