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

Spring AOP(一) 基本概念和例子

阅读更多

一、基本概念

切面(aspect):用来切插业务方法的类。

连接点(joinpoint):是切面类和业务类的连接点,其实就是封装了业务方法的一些基本属性,作为通知的参数来解析。

通知(advice):在切面类中,声明对业务方法做额外处理的方法。

切入点(pointcut):业务类中指定的方法,作为切面切入的点。其实就是指定某个方法作为切面切的地方。

目标对象(target object):被代理对象。

AOP代理(aop proxy):代理对象。

通知:

前置通知(before advice):在切入点之前执行。

后置通知(after returning advice):在切入点执行完成后,执行通知。

环绕通知(around advice):包围切入点,调用方法前后完成自定义行为。

异常通知(after throwing advice):在切入点抛出异常后,执行通知。

 

二、例子

首先我们来看看一个简单的使用Spring AOP的例子

1.接口Person 

public interface Person {
    public void sayHello() ;
}

2.实现类Student,实现了Person接口,也是我们这里的目标类(被代理类)

public class Student implements Person {
    @Override
    public void sayHello() {
        System.out.println("I am a student~");
    }
}

 3.通知类(提供方法增强的逻辑)

//方法调用前的增强(实现了MethodBeforeAdvice)
public class BeforeMethod implements MethodBeforeAdvice {
    @Override
    public void before(Method method, Object[] args, Object target)
            throws Throwable {
        System.out.println("this is before method!!!");
 
    }
}

 

//方法返回后的增强(实现了AfterReturningAdvice)
public class AfterMethod implements AfterReturningAdvice {
    @Override
    public void afterReturning(Object returnValue, Method method,
            Object[] args, Object target) throws Throwable {
        System.out.println("this is after return!!! how?");
    }
}

 4.切点实现(决定Advice通知应该作用于哪个连接点)

public class MyPointCut extends NameMatchMethodPointcut {
    private static final long serialVersionUID = -164470606471336765L;
    //作用于所有方法
        @Override
    public boolean matches(Method method, @SuppressWarnings("rawtypes") Class targetClass) {
        return true;
    }
}

 6.配置信息

<?xml version="1.0" encoding="GB2312"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
    default-autowire="byName">
    <!-- 业务类 -->
    <bean id="student" class="org.learn.aop.Student"></bean>
 
    <!-- 通知类 -->
    <bean id="beforeMethod" class="org.learn.aop.BeforeMethod"></bean>
    <bean id="afterMethod" class="org.learn.aop.AfterMethod"></bean>
 
    <!-- PointCut -->
    <bean id="myPointCut" class="org.learn.aop.MyPointCut"></bean>
 
 
    <!-- Advisor -->
    <bean id="myAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
        <property name="pointcut">
            <ref bean="myPointCut"/>
        </property>
        <property name="advice">
            <ref bean="beforeMethod"/>
        </property>
    </bean>
 
    <!-- ProxyFactoryBean -->
   <bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="proxyInterfaces">
            <value>org.learn.aop.Person</value>
        </property>
         <property name="target">
            <ref bean="student"/>
        </property>
        <property name="interceptorNames">
            <list>
                <value>myAdvisor</value>
                                <!-- 如果这里给的是advice,那么将被封装成一个advisor,其中pointcut采用默认实现-->
                <value>afterMethod</value>
            </list>
        </property>
   </bean>
</beans>

 7.测试

public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("org/learn/aop/AOPLearn.xml");
        Person student = (Person) context.getBean("proxyFactoryBean");
        student.sayHello();
    }

 8.结果

this is before method!!!
I am a student~
this is after return!!! how?

 

0
0
分享到:
评论
1 楼 shenselongge 2014-08-24  
 

相关推荐

    简单spring aop 例子

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

    Spring AOP完整例子

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

    SPRING_AOP_概念解析以及例子示范.docx

    Spring AOP,全称Spring面向切面编程,是一种强大的设计模式,它允许程序员在不修改原有代码的情况下,插入额外的功能,比如日志记录、事务管理、性能监控等。AOP的核心概念包括: 1. **通知(Advice)**:通知定义了...

    spring aop 经典例子(原创)

    Spring AOP,全称Aspect-Oriented Programming,是...无论是新手还是经验丰富的开发者,都可以从中学习到Spring AOP的基本概念和实践技巧。通过实际操作和分析`testaop`中的代码,你将更好地掌握面向切面编程的精髓。

    SpringAOP的例子

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

    spring的aop简单例子

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

    spring aop简单例子

    在本文中,我们将深入探讨Spring AOP的基本概念、工作原理以及如何通过一个简单的例子来实现它。 AOP的核心概念包括切面(Aspect)、连接点(Join Point)、通知(Advice)、引入(Introduction)、目标对象...

    spring aop例子

    要创建一个Spring AOP的例子,我们首先需要定义一个切面类,它可能包含一个或多个通知方法。然后,我们需要定义切入点表达式,这可以使用`@Pointcut`注解完成。接下来,我们可以使用`@Before`, `@After`, `@Around`,...

    Spring 2.5 AOP 例子

    Spring 2.5 AOP(面向切面编程)是Java应用程序中的一个重要概念,它允许开发者在不修改原有代码的情况下插入新的行为或监控。这个例子旨在帮助我们理解和应用Spring框架的AOP特性。以下是对该主题的详细解释: 一...

    spring aop的demo

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

    springAOP演示例子

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

    spring aop 注解例子

    本例子就是一个使用 Spring AOP 注解实现的项目,旨在展示如何在简单的环境中应用这一特性。 1. **AOP 基础概念** - **切面(Aspect)**: 包含一组相关功能的模块,这些功能在多个对象中都可能被用到,比如日志、...

    SPRING AOP 概念解析以及例子示范

    **SPRING AOP 概念解析以及例子示范** 在Java开发中,Spring框架因其强大的功能和灵活的设计,被广泛应用于企业级应用。其中,AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它...

    spring aop spring aop

    在Spring AOP中,主要有以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,包含pointcut(切点)和advice(通知)两部分。例如,在上述代码中的`PersonProxy`类就是一个切面,它定义了`before()`和...

    Spring AOP 概念理解及@AspectJ支持

    **Spring AOP 概念理解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它允许我们通过...理解和熟练运用Spring AOP及其@AspectJ注解是每个Spring开发者必备的技能之一。

    Spring AOP学习资料(pdf)

    ### Spring AOP 学习资料知识点总结 #### 一、Spring AOP 概念与背景 **Spring AOP**(面向切面编程)是Spring框架中的一个重要...掌握Spring AOP的基本概念和实现方法对于开发高效、健壮的企业级应用程序至关重要。

    Spring AOP需要的jar

    这个库包含了一些基本的AOP概念,如JoinPoint(连接点)、Pointcut(切点)、Advice(通知)等的接口。这些接口为创建和使用切面提供了通用的API,无论你选择使用Spring自己的AOP还是其他AOP实现,如AspectJ,都可以...

    Spring AOP简单demo

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

    springAop的配置实现

    Spring AOP 基础概念** - **切面(Aspect)**:切面是关注点的模块化,比如日志、事务管理等,这些关注点可以被定义为一个独立的模块,称为切面。 - **通知(Advice)**:在特定连接点上执行的代码,也就是切面要...

Global site tag (gtag.js) - Google Analytics