Spring, 基于代理的AOP

来源:互联网 发布:js eval 替代 编辑:程序博客网 时间:2024/04/29 04:25

先定义接口

package net.wchdai.spring.dao;public interface StudentDAO {    public void saveStudent();    public void queryStudent();}

接口的实现类:

package net.wchdai.spring.dao.impl;import net.wchdai.spring.dao.StudentDAO;public class StudentDAOImpl implements StudentDAO{    @Override    public void saveStudent() {        System.out.println("StudentDAOImpl save student");    }    @Override    public void queryStudent() {        System.out.println("StudentDAOImpl query student");    }}

代理类:

package net.wchdai.spring.proxy;import java.lang.reflect.Method;import org.springframework.aop.AfterReturningAdvice;import org.springframework.aop.MethodBeforeAdvice;public class MyStudentProxy implements MethodBeforeAdvice,AfterReturningAdvice  {    @Override    public void afterReturning(Object arg0, Method arg1, Object[] arg2,            Object arg3) throws Throwable {        System.out.println("afterReturning");    }    @Override    public void before(Method arg0, Object[] arg1, Object arg2)            throws Throwable {        System.out.println("before");    }}

ApplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="studentDaoImpl" class="net.wchdai.spring.dao.impl.StudentDAOImpl"/><bean id="studentProxy" class="net.wchdai.spring.proxy.MyStudentProxy"/><bean id="studentDaoPointCut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">    <property name="pattern" value=".*Student"></property></bean><bean id="studentDaoAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">    <property name="advice" ref="studentProxy"></property>    <property name="pointcut" ref="studentDaoPointCut"></property></bean><bean id="studentDaoProxyFactory" class="org.springframework.aop.framework.ProxyFactoryBean">    <property name="target" ref="studentDaoImpl"></property>    <property name="interceptorNames" value="studentDaoAdvisor"></property>    <property name="proxyInterfaces" value="net.wchdai.spring.dao.StudentDAO"></property></bean></beans>

单元测试:

package net.wchdai.spring.test;import net.wchdai.spring.dao.StudentDAO;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import junit.framework.TestCase;public class StudentAOPTest extends TestCase{    public void testAOPProxy(){        ApplicationContext ctx = new ClassPathXmlApplicationContext("ApplicationContext.xml");        StudentDAO sdao=(StudentDAO)ctx.getBean("studentDaoProxyFactory");        sdao.saveStudent();    }}

执行结果:

beforeStudentDAOImpl save studentafterReturning
0 0
原创粉丝点击