spring AOP 部分代码

  1. package org.advice;
  2. import java.lang.reflect.Method;
  3. import org.springframework.aop.MethodBeforeAdvice;
  4. public class logBeforeAdvice implements MethodBeforeAdvice{
  5.     public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
  6.       System.out.println("方法前写日志"+arg2.toString());
  7.     }
  8. }
  9. ---------------------------------------
  10. package org.advice;
  11. import java.lang.reflect.Method;
  12. import org.springframework.aop.AfterReturningAdvice;
  13. public class logAfterAdvice implements AfterReturningAdvice{
  14.     public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable {
  15.          System.out.println("方法调用后开始写日志="+arg0);
  16.     }
  17. }
  18. ---------------------------------------------
  19. package org.advice;
  20. import org.aopalliance.intercept.MethodInterceptor;
  21. import org.aopalliance.intercept.MethodInvocation;
  22. public class logAdvice implements MethodInterceptor{
  23.     public Object invoke(MethodInvocation arg0) throws Throwable {
  24.          //arg0.getMethod() //得到方法
  25. //      arg0.getArguments(); //得到参数值
  26. //      arg0.getStaticPart(); //得到静态方法;
  27. //      arg0.getThis();   //得到 targer 对象
  28.         
  29.         System.out.println("方法之前写日志。。。");
  30.         Object o=arg0.proceed();                   //执行方法;
  31.         System.out.println("方法后写日志。。。");
  32.         
  33.         return o;
  34.     }
  35. }
  36. -----------------applicationContext.xml 中的代码--------------------------------
  37. <?xml version="1.0" encoding="UTF-8"?>
  38. <beans
  39.     xmlns="http://www.springframework.org/schema/beans"
  40.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  41.     xsi:schemaLocation="http://www.springframework.org/schema/beans spring-beans-2.0.xsd">
  42.     <bean name="UserDao" class="org.dao.UserDao"></bean>
  43.     <bean name="DeptDao" class="org.dao.DeptDao"></bean>
  44.     
  45.     
  46.     <bean name="beforAfter" class="org.advice.logAdvice"/>
  47.     <bean name="after" class="org.advice.logAfterAdvice"/>
  48.     <bean name="before" class="org.advice.logBeforeAdvice"/>
  49.     
  50.     
  51.     <!--自动匹配-->
  52.     <bean name="autoproxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  53.     <property name="beanNames">
  54.       <list>
  55.         <value>*Dao</value>  <!-- 以dao结尾的注册bean的name -->
  56.       </list>
  57.     </property>
  58.     <property name="interceptorNames">
  59.       <list>
  60.         <!--<value>before</value>-->
  61.             <value>regpx</value><!-- 正则表达式 -->
  62.       </list>
  63.     </property>
  64.   </bean>
  65.   
  66.     
  67.     <!--代理工厂  好用-->
  68.     <bean name="daoProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
  69.         <property name="proxyInterfaces">
  70.             <list>
  71.                 <value>org.IDao</value>
  72.             </list>
  73.         </property>
  74.         <property name="target" ref="UserDao"></property>
  75.         <property name="interceptorNames">
  76.             <list>
  77.                 <value>regpx</value> <!-- 用正则表达式的灵活 -->
  78. <!--            <value>before</value>-->
  79. <!--            <value>after</value>-->
  80. <!--            <value>beforAfter</value>-->
  81.                 
  82.             </list>
  83.         </property>
  84.     </bean>
  85.     
  86.     
  87. <!--指定方法名太挨次了 不采用   -->
  88. <!--  <bean name="namematch" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">-->
  89. <!--    <property name="advice" ref="before"></property>-->
  90. <!--    <property name="mappedNames">-->
  91. <!--      <list>-->
  92. <!--            <value>save</value>-->
  93. <!--      </list>-->
  94. <!--    </property>-->
  95. <!--  </bean>-->
  96. <!--  -->
  97.     
  98. <!--    正则表达式-->
  99.     <bean name="regpx" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
  100.         <property name="advice" ref="after"></property>
  101.         <property name="patterns">
  102.             <value>.*up.*</value>
  103.         </property>
  104.     </bean>
  105. </beans>
  106. -------------------------IDao 接口 中代码 ----------------
  107. /**
  108.  * 
  109.  */
  110. package org;
  111. /**
  112.  * @author Administrator
  113.  *
  114.  */
  115. public interface IDao {
  116.     public void save(Object o)  throws Exception;
  117.     public void update(Object o) throws Exception;
  118.     public void delete(Object o)throws Exception;
  119. }
  120. ------------------- Dao 中的 代码-----------------------------------
  121. package org.dao;
  122. import org.IDao;
  123. public class UserDao implements IDao {
  124.     public void delete(Object o) throws Exception {
  125.          
  126.         System.out.println("删除用户。。。");
  127.     }
  128.     public void save(Object o) throws Exception {
  129.          System.out.println("新增用户。。。");
  130.     }
  131.     public void update(Object o) throws Exception {
  132.          
  133.         System.out.println("修改用户资料。。。");
  134.     }
  135. }
  136. ---------------------------测试 中的 代码-----------------------
  137. package org.test;
  138. import org.IDao;
  139. import org.dao.UserDao;
  140. import org.springframework.context.ApplicationContext;
  141. import org.springframework.context.support.ClassPathXmlApplicationContext;
  142. public class testLogAdvice {
  143.      
  144.     public static void main(String[] args) throws Exception {
  145.         testLogAdvice tla=  new testLogAdvice(); 
  146.         
  147.         tla.before();
  148.         System.out.println("---------------");
  149.         tla.sysAdvice();
  150.     }
  151.     public void before() throws Exception{
  152.         ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
  153.         
  154.         //前后 中 都可以在这里调度
  155.         
  156.         IDao dao=(IDao)ac.getBean("daoProxy");
  157.         dao.save("保存动作");
  158.         dao.update("baocun");
  159.     }
  160.    public void sysAdvice() throws Exception{
  161.        //autoproxy
  162.        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
  163.        IDao dao=(IDao)ac.getBean("UserDao");
  164.        dao.save(null);
  165.        dao.update("sssssssssssss");
  166.        
  167.    }
  168. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值