package onlyfun.caterpillar;
public interface IHello {
public void hello(String name);
}
package onlyfun.caterpillar;
public class HelloSpeaker implements IHello {
public void hello(String name) {
System.out.println("Hello, " + name);
}
}
package onlyfun.caterpillar;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.aop.MethodBeforeAdvice;
public class LogBeforeAdvice
implements MethodBeforeAdvice {
private Logger logger =
Logger.getLogger(this.getClass().getName());
public void before(Method method, Object[] args,
Object target) throws Throwable {
logger.log(Level.INFO,
"method starts..." + method);
}
}
package onlyfun.caterpillar;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.aop.AfterReturningAdvice;
public class LogAfterAdvice
implements AfterReturningAdvice {
private Logger logger =
Logger.getLogger( this.getClass().getName());
public void afterReturning(Object object,
Method method,
Object[] args,
Object target) throws Throwable {
logger.log(Level.INFO, "method ends..." + method);
}
}
//测试类
package onlyfun.caterpillar;
import org.springframework.context.ApplicationContext;
import org.springframework.context.
support.FileSystemXmlApplicationContext;
public class SpringAOPDemo {
public static void main(String[] args) {
ApplicationContext context =
new FileSystemXmlApplicationContext("beans-config.xml");
IHello helloProxy = (IHello) context.getBean("helloProxy");
helloProxy.hello("penghao122");
}
}
beans_config.xml
<bean id="logBeforeAdvice"
class="onlyfun.caterpillar.LogBeforeAdvice"/>
<bean id="logAfterAdvice"
class="onlyfun.caterpillar.LogAfterAdvice"/>
<bean id="helloSpeaker"
class="onlyfun.caterpillar.HelloSpeaker"/>
<bean id="helloProxy"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>onlyfun.caterpillar.IHello</value>
</property>
<property name="target">
<ref bean="helloSpeaker"/>
</property>
<property name="interceptorNames">
<list>
<value>logBeforeAdvice</value>
<value>logAfterAdvice</value>
</list>
</property>
</bean>