经过这段日子的学习和使用Spring,慢慢地体会到Spring的优妙之处,正在深入地吸收Spring的精华,呵呵。现在写的这个只是个简单AOP例子,包括前置通知,后置通知,环绕通知,和目标对象。写这个例子的主要目标只是想让想学AOP的能更快地入门,了解一下如何去配置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
 */
 4
package com.dragon.Advice;
 5
 6
import java.lang.reflect.Method;
 7
 8
import org.springframework.aop.AfterReturningAdvice;
 9
10
/** *//**
11
 * @author dragon
12
 *
13
 */
14
public 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
 */
 4
package com.dragon.Advice;
 5
 6
import org.aopalliance.intercept.MethodInterceptor;
 7
import org.aopalliance.intercept.MethodInvocation;
 8
 9
10
/** *//**
11
 * @author dragon
12
 *
13
 */
14
public 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
 */
 4
package com;
 5
 6
import org.springframework.context.ApplicationContext;
 7
import org.springframework.context.support.FileSystemXmlApplicationContext;
 8
 9
import com.dragon.study.IStudent;
10
11
/** *//**
12
 * @author dragon
13
 *
14
 */
15
public 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
 
	posted on 2006-12-03 03:29 
javadragon 阅读(76816) 
评论(59)  编辑  收藏