AOP的MethodBeforeAdvice

    技术2022-05-19  18

    使用Spring自动生成代理类,spring利用的是动态代理机制 接口 Java代码 public interface UserDao { void addUser(); void deleteUser(); } 两个实现: Java代码 public class UserDaoMySqlImpl implements UserDao {     @Override  public void addUser() {     System.out.println("UserDaoMySqlImpl.addUser()");   }     @Override  public void deleteUser() {     System.out.println("UserDaoMySqlImpl.deleteUser()");     }     }   public class UserDaoOracleImpl implements UserDao { @Override public void addUser() {   System.out.println("UserDaoOracleImpl.addUser()"); } @Override public void deleteUser() {   System.out.println("UserDaoOracleImpl.deleteUser()"); } } Device import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; public class UserDaoBeforeAdvice implements MethodBeforeAdvice { @Override public void before(Method arg0, Object[] arg1, Object arg2)    throws Throwable {   System.out.println("UserDaoBeforeAdvice.before()"); } } spring的配置文件 Xml代码 <!-- 配置实现类的bean,可以把所有的实现类都写上 -->  <bean id="userdao" class="com.dowebber.spring.aop.UserDaoMySqlImpl"></bean>  <!--配置Advice的bean -->  <bean id="beforeadvice" class="com.dowebber.spring.aop.UserDaoBeforeAdvice"></bean>  <!--配置spring自动生成代理对象所需要的一些参数 -->  <bean id="userdaoproxy" class="org.springframework.aop.framework.ProxyFactoryBean">  <property name="proxyInterfaces" value="com.dowebber.spring.aop.UserDao"/>  <property name="target">    <ref bean="userdao"/>  </property>  <property name="interceptorNames">    <list>     <value>beforeadvice</value>    </list>  </property>  </bean>  测试类: Java代码 import org.springframework.context.ApplicationContext;   import org.springframework.context.support.ClassPathXmlApplicationContext;     public class TestUserDaoBeforeDevice {     public static void main(String[] args) {          ApplicationContext context = new ClassPathXmlApplicationContext("com/dowebber/spring/aop/spring.xml");     UserDao dao = (UserDao)context.getBean("userdaoproxy");     dao.addUser();   }     } 


    最新回复(0)