一个简略的Spring的AOP例子
一个简单的Spring的AOP例子
转自:http://www.blogjava.net/javadragon/archive/2006/12/03/85115.html
一个简单的Spring的AOP例子
经过这段日子的学习和使用Spring,慢慢地体会到Spring的优妙之处,正在深入地吸收Spring的精华,呵呵。现在写的这个只是个简单AOP例子,包括前置通知,后置通知,环绕通知,和目标对象。写这个例子的主要目标只是想让想学AOP的能更快地入门,了解一下如何去配置AOP里面的东东。
目标对象的接口:IStudent.java
目标类:StudentImpl.java
前置通知:BeforeAdvice.java
后置通知:AfterAdvice.java
环绕通知:CompareInterceptor.java
配置文件applicationContext.xml
现在开始写测试类,Test.java
自己最近无聊就学学JAVA技术,毕竟工作3年了还是觉得自己积累太少,其实是记录总结的不多,今天才下决定把平时看的信息放到BLOG上
看看dragon的AOP例子,觉得简单易懂,看到配置文件的时候就在想,如果能改成这样多好:
ProxyFactoryBean支持list就好了,灭哈哈哈
转自:http://www.blogjava.net/javadragon/archive/2006/12/03/85115.html
一个简单的Spring的AOP例子
经过这段日子的学习和使用Spring,慢慢地体会到Spring的优妙之处,正在深入地吸收Spring的精华,呵呵。现在写的这个只是个简单AOP例子,包括前置通知,后置通知,环绕通知,和目标对象。写这个例子的主要目标只是想让想学AOP的能更快地入门,了解一下如何去配置AOP里面的东东。
目标对象的接口:IStudent.java
/** */ /** * */ package com.dragon.study; /** */ /** * @author dragon * */ public interface IStudent { public void addStudent(String name); }
目标类:StudentImpl.java
/** */ /** * */ package com.dragon.study.Impl; import com.dragon.study.IStudent; /** */ /** * @author dragon * */ public class StudentImpl implements IStudent { public void addStudent(String name) { System.out.println( " 欢迎 " + name + " 你加入Spring家庭! " ); } }
前置通知:BeforeAdvice.java
/** */ /** * */ package com.dragon.Advice; import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; /** */ /** * @author dragon * */ public class BeforeAdvice implements MethodBeforeAdvice { public void before(Method method,Object[] args, Object target) throws Throwable { System.out.println( " 这是BeforeAdvice类的before方法. " ); } }
后置通知:AfterAdvice.java
/** *//** * */ package com.dragon.Advice; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; /** *//** * @author dragon * */ public class AfterAdvice implements AfterReturningAdvice{ public void afterReturning(Object returnValue ,Method method, Object[] args,Object target) throws Throwable{ System.out.println("这是AfterAdvice类的afterReturning方法."); } }
环绕通知:CompareInterceptor.java
/** *//** * */ package com.dragon.Advice; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; /** *//** * @author dragon * */ public class CompareInterceptor implements MethodInterceptor{ public Object invoke(MethodInvocation invocation) throws Throwable{ Object result = null; String stu_name = invocation.getArguments()[0].toString(); if ( stu_name.equals("dragon")){ //如果学生是dragon时,执行目标方法, result= invocation.proceed(); } else{ System.out.println("此学生是"+stu_name+"而不是dragon,不批准其加入."); } return result; } }
配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="beforeAdvice" class="com.dragon.Advice.BeforeAdvice"></bean> <bean id="afterAdvice" class="com.dragon.Advice.AfterAdvice"></bean> <bean id="compareInterceptor" class="com.dragon.Advice.CompareInterceptor"></bean> <bean id="studenttarget" class="com.dragon.study.Impl.StudentImpl"></bean> <bean id="student" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>com.dragon.study.IStudent</value> </property> <property name="interceptorNames"> <list> <value>beforeAdvice</value> <value>afterAdvice</value> <value>compareInterceptor</value> </list> </property> <property name="target"> <ref bean="studenttarget"/> </property> </bean> </beans>
现在开始写测试类,Test.java
/** *//** * */ package com; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import com.dragon.study.IStudent; /** *//** * @author dragon * */ public class Test { /** *//** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ApplicationContext ctx = new FileSystemXmlApplicationContext("/com/dragon/applicationContext.xml"); IStudent person = (IStudent)ctx.getBean("student"); person.addStudent("dragon"); // person.addStudent("javadragon"); } }
自己最近无聊就学学JAVA技术,毕竟工作3年了还是觉得自己积累太少,其实是记录总结的不多,今天才下决定把平时看的信息放到BLOG上
看看dragon的AOP例子,觉得简单易懂,看到配置文件的时候就在想,如果能改成这样多好:
<beans> <bean id="beforeAdvice" class="com.dragon.Advice.BeforeAdvice"></bean> <bean id="afterAdvice" class="com.dragon.Advice.AfterAdvice"></bean> <bean id="compareInterceptor" class="com.dragon.Advice.CompareInterceptor"></bean> <bean id="studenttarget" class="com.dragon.study.Impl.StudentImpl"></bean> <bean id="student" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>com.dragon.study.IStudent</value> </property> <property name="interceptorNames"> <list> <value>beforeAdvice</value> <value>afterAdvice</value> <value>compareInterceptor</value> </list> </property> <property name="target"> <ref bean="studenttarget1"/> <ref bean="studenttarget2"/> ..... </property> </bean> </beans>
ProxyFactoryBean支持list就好了,灭哈哈哈
1 楼
id=myjava
2011-01-04
我也有同感,顶你一下!