`
yangzisai
  • 浏览: 87643 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

一个简单的AOP实例

阅读更多
目标对象的接口:IStudent.java

1   /** */ /**
2  *
3   */
4  package  com.dragon.study;

6   /** */ /**
7  *  @author  dragon
8  *
9   */
10   public   interface  IStudent   {
11    
12      public   void  addStudent(String name);
13 }
14 

目标类:StudentImpl.java

1   /** */ /**
2  *
3   */
4  package  com.dragon.study.Impl;

6  import  com.dragon.study.IStudent;

8   /** */ /**
9  *  @author  dragon
10  *
11   */
12   public   class  StudentImpl  implements  IStudent  {
13 
14        public   void  addStudent(String name)  {
15          System.out.println( " 欢迎  " + name + "  你加入Spring家庭! " );
16      }
17 }
18 


前置通知:BeforeAdvice.java

1   /** */ /**
2  *
3   */
4  package  com.dragon.Advice;

6  import  java.lang.reflect.Method;

8  import  org.springframework.aop.MethodBeforeAdvice;

10   /** */ /**
11  *  @author  dragon
12  *
13   */
14   public   class  BeforeAdvice  implements  MethodBeforeAdvice  {
15 
16        public   void  before(Method method,Object[] args, Object target)
17                  throws  Throwable  {
18          
19           System.out.println( " 这是BeforeAdvice类的before方法. " );
20          
21       }
22 }
23 

后置通知:AfterAdvice.java

1/** *//**
2 *
3 */
4package com.dragon.Advice;
5
6import java.lang.reflect.Method;
7
8import org.springframework.aop.AfterReturningAdvice;
9
10/** *//**
11 * @author dragon
12 *
13 */
14public class AfterAdvice implements AfterReturningAdvice{
15   
16    public void afterReturning(Object returnValue ,Method method,
17                   Object[] args,Object target) throws Throwable{
18        System.out.println("这是AfterAdvice类的afterReturning方法.");
19    }
20     
21
22}
23

环绕通知:CompareInterceptor.java

1/** *//**
2 *
3 */
4package com.dragon.Advice;
5
6import org.aopalliance.intercept.MethodInterceptor;
7import org.aopalliance.intercept.MethodInvocation;
8
9
10/** *//**
11 * @author dragon
12 *
13 */
14public class CompareInterceptor implements MethodInterceptor{
15
16      public Object invoke(MethodInvocation invocation) throws Throwable{
17          Object result = null;
18         String stu_name = invocation.getArguments()[0].toString();
19         if ( stu_name.equals("dragon")){
20             //如果学生是dragon时,执行目标方法,
21              result= invocation.proceed();
22             
23         } else{
24             System.out.println("此学生是"+stu_name+"而不是dragon,不批准其加入.");
25         }
26       
27          return result;
28      }
29}
30

配置文件applicationContext.xml

1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
3
4<beans>
5
6<bean id="beforeAdvice" class="com.dragon.Advice.BeforeAdvice"></bean>
7<bean id="afterAdvice" class="com.dragon.Advice.AfterAdvice"></bean>
8<bean id="compareInterceptor" class="com.dragon.Advice.CompareInterceptor"></bean>
9<bean id="studenttarget" class="com.dragon.study.Impl.StudentImpl"></bean>
10
11<bean id="student" class="org.springframework.aop.framework.ProxyFactoryBean">
12  <property name="proxyInterfaces">
13    <value>com.dragon.study.IStudent</value>
14  </property>
15  <property name="interceptorNames">
16    <list>
17     <value>beforeAdvice</value>
18     <value>afterAdvice</value>
19    <value>compareInterceptor</value> 
20    </list>
21  </property>
22  <property name="target">
23    <ref bean="studenttarget"/>
24  </property>
25
26</bean>
27
28
29
30
31</beans>


  现在开始写测试类,Test.java 
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.FileSystemXmlApplicationContext;  
 
/** 
*/ 
public class Test {  
 
    public static void main(String[] args) {  
        ApplicationContext ctx = new FileSystemXmlApplicationContext("/src/applicationContext.xml");  
        Student s = (Student) ctx.getBean("student");  
        s.addStudent("ss");   
    }  

http://jff.iteye.com/blog/221458
分享到:
评论

相关推荐

    spring-aop实例

    1. **切面(Aspect)**:切面是关注点的模块化,例如,一个日志记录切面可能包含所有与日志记录相关的代码。在Spring AOP中,切面由两个主要部分组成:通知(advice)和切点(pointcut)。 2. **通知(Advice)**:...

    spring AOP实例代码(带详细的讲解)

    在`testAOP`这个文件中,你可能会找到一个名为`MyAspect`的类,它代表了一个切面,包含了若干个通知方法。例如,一个`@Before`注解的方法会在目标方法执行前运行,用于进行日志记录。另一个可能是`@AfterThrowing`...

    spring 应用aop 实例

    通过上述步骤,你可以创建一个简单的Spring AOP应用,实现对特定方法的调用进行日志记录。当然,AOP的潜力远不止于此,你可以根据实际场景扩展通知类型,或者创建更复杂的切入点表达式,以实现更细粒度的控制。 在...

    java动态代理实例aop

    Java动态代理是Java编程中一个非常重要的特性,它在实际开发中被广泛应用于面向切面编程(Aspect-Oriented Programming,简称AOP)领域。AOP是一种编程范式,旨在提高代码的可重用性和模块化,通过将关注点分离,...

    SpringAop实例

    在这个"SpringAop实例"中,可能包含了演示如何创建和使用这两种配置方式的代码示例。文件列表中的"spring32"可能是指Spring 3.2版本的相关文件,这个版本的Spring对AOP的支持已经相当成熟。 通过学习这个实例,你...

    spring_aop_拦截实例

    在Spring AOP中,我们通过定义一个实现了`org.springframework.aop.MethodInterceptor`接口的类来创建自定义拦截器。这个类需要实现`invoke`方法,该方法会在目标方法被调用之前和之后执行。 接下来,我们需要将...

    spring aop实例

    另一个文件"testaop"是一个MyEclipse项目,包含了实际的Spring AOP应用实例。这个项目可以帮助你更好地理解如何在实际项目中集成和使用Spring AOP。你可以直接导入此项目到MyEclipse中,运行并观察AOP如何工作,例如...

    springboot AOP使用实例源码

    在Springboot上使用AOP的简单实例源码,可以结合本人的文章一起学习理解 https://blog.csdn.net/vincent_yuan89/article/details/85128009

    Spring Aop使用实例

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它提供了一种在不修改原有代码的情况下,通过代理方式添加额外功能的技术。这种技术使得我们可以实现如日志记录、事务...

    spring 3.0 aop 实例

    通过以上知识,我们可以创建一个简单的Spring AOP实例,例如创建一个日志切面,记录每个服务方法的执行时间: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* ...

    spring aop xml 实例

    在Java开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱,而Spring AOP(面向切面编程)则是Spring框架中的一个重要组成部分。AOP允许开发者定义“切面”,它是一种将关注点分离的方式,使得我们可以把...

    spring-aop实例demo

    在这个实例中,我们看到了如何在Spring 3.2.8中使用AOP进行简单的日志记录。这只是AOP功能的冰山一角,实际上,你可以通过切面来处理更复杂的场景,如事务管理、性能监控、安全控制等。切记,合理地使用AOP可以极大...

    Spring AOP入门及其实例讲解、下载

    这个示例可能包括了一个简单的业务服务类、一个切面类以及相关的测试类。通过分析这些文件,我们可以更深入地理解如何在实际项目中应用Spring AOP。 总结来说,Spring AOP提供了一种优雅的方式,让我们能够将横切...

    简单spring aop 例子

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

    spring 2.0使用AOP实例(基于Annotation的配置方式)

    这篇博客文章将探讨如何在Spring 2.0中使用AOP实例,特别是通过注解来实现。 首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了横切关注点,即那些跨越多个对象的行为或责任。在Spring中,切...

    Spring-AOP实例

    6. 目标对象(Target Object):被一个或多个切面所代理的对象。 7. 代理(Proxy):Spring AOP创建的对象,用于实现切面逻辑。 8. 织入(Weaving):将切面与其他对象连接起来,可以在编译时、加载时或运行时完成...

    spring aop权限小实例

    例如,我们可以创建一个`AuthorizationAspect`类,它有一个`@Before`注解的方法,该方法会在目标方法执行前进行权限检查。 ```java import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang....

    Spring Aop实例(AOP 如此简单)@Aspect、@Around 注解方式配置

    Spring AOP 实例(AOP 如此简单)@Aspect、@Around 注解方式...本实例展示了 Spring AOP 的基本概念和应用,展示了如何使用 @Aspect 和 @Around 注解来实现一个简单的时间监控功能,从而提高了系统的灵活性和可维护性。

    spring AOP 实例(@AspectJ)

    一个基于@AspectJ的spring2.0 AOP应用实例,很小很简单,没有任何额外信息,最适合AOP入门学习。使用log4j打印信息。把项目直接import进myeclipse就可以使用啦......

Global site tag (gtag.js) - Google Analytics