zoukankan      html  css  js  c++  java
  • 一个简单的Spring的AOP例子

    目标对象的接口:IStudent.java

     1  /** 
     2  * 
     3   */ 

     4  package  com.dragon.study;
     5  
     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;
     5  
     6  import  com.dragon.study.IStudent;
     7  
     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;
     5  
     6  import  java.lang.reflect.Method;
     7  
     8  import  org.springframework.aop.MethodBeforeAdvice;
     9  
    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

     1/**
     2 * 
     3 */

     4package com;
     5
     6import org.springframework.context.ApplicationContext;
     7import org.springframework.context.support.FileSystemXmlApplicationContext;
     8
     9import com.dragon.study.IStudent;
    10
    11/**
    12 * @author dragon
    13 *
    14 */

    15public class Test {
    16
    17    /**
    18     * @param args
    19     */

    20    public static void main(String[] args) {
    21        // TODO Auto-generated method stub
    22      ApplicationContext ctx = 
    23          new FileSystemXmlApplicationContext("/com/dragon/applicationContext.xml");
    24      
    25      IStudent person = (IStudent)ctx.getBean("student");
    26      person.addStudent("dragon");
    27      
    28//      person.addStudent("javadragon");
    29    }

    30
    31}

    32
  • 相关阅读:
    linux向下向上查找
    安卓中的线程
    安卓 新浪微博随便看看
    平面图的基本概念及性质
    软件工程知识点总结
    磁盘阵列RAID原理、种类及性能优缺点对比
    面试题之------三次握手与四次挥手过程
    不忘初心
    考研彼岸,花开馨香
    In和Out指令
  • 原文地址:https://www.cnblogs.com/564085446java/p/3669931.html
Copyright © 2011-2022 走看看