码迷,mamicode.com
首页 > 其他好文 > 详细

环绕增强

时间:2017-09-17 22:11:16      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:static   framework   aop   domain   tac   property   lang   tostring   异常处理   

  环绕增强在目标方法的前后都可以织入增强处理,环绕增强是功能最强大的增强处理,spring把目标方法的控制权全部交给了它,在环绕增强处理中,可以获取或修改目标方法的参数、返回值、,可以对它进行异常处理,其次可以决定目标方法是否执行。

1.AroundLogger类

 1 package com.aop;
 2 
 3 import java.lang.reflect.Method;
 4 import java.util.Arrays;
 5 
 6 import org.aopalliance.intercept.MethodInterceptor;
 7 import org.aopalliance.intercept.MethodInvocation;
 8 import org.apache.log4j.Logger;
 9 /**
10  * 
11  * @author Mr
12  * 环绕增强处理
13  */
14 public class AroundLogger implements MethodInterceptor {
15     
16     private static final Logger log = Logger.getLogger(AroundLogger.class);
17     
18     @Override
19     public Object invoke(MethodInvocation arg0) throws Throwable {
20         //处理代理对象
21         Object obj = arg0.getThis();
22         //获取代理方法
23         Method method =arg0.getMethod();
24         //获取方法参数
25         Object [] args = arg0.getArguments();
26         log.info("调用"+obj+"的"+method.getName()+"方法,方法参数是:"
27                 +Arrays.toString(args));
28         try {
29             Object result = arg0.proceed();//调用目标方法,获取目标方法的返回值
30             log.info("调用"+obj+"的"+method.getName()+"方法,方法返回值是:"
31                     +result);
32             return result;
33         } catch (Exception e) {
34             log.error(method.getName()+"方法抛出异常"+e);
35             e.printStackTrace();
36         }
37         
38         
39         return null;
40     }
41 
42 }

2.spring配置文件,记得把IUserDaoImpl.java中的自定义异常删掉

 1     <bean id="dao" class="com.dao.impl.IUserDaoImpl"></bean>
 2     <bean id="biz" class="com.biz.impl.IUserBizImpl">
 3         <property name="dao" ref="dao"></property>
 4     </bean>
 5     <bean id="aroundlog" class="com.aop.AroundLogger"></bean>
 6     <aop:config>
 7     <!-- <aop:pointcut expression="execution(public void save(com.domain.User))" id="pointcut"/>-->
 8         <aop:pointcut expression="execution(* com.biz.IUserBiz.*(..))" id="pointcut"/>
 9         <aop:advisor advice-ref="aroundlog" pointcut-ref="pointcut"/>
10     </aop:config>

3.测试类

 1 package com.test;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 import com.biz.IUserBiz;
 6 import com.domain.User;
 7 
 8 /**
 9  * 
10  * @author Mr
11  * aop测试类
12  */
13 public class Test {
14 
15     public static void main(String[] args) {
16         //解析配置文件
17         ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
18         
19         IUserBiz biz = (IUserBiz) ac.getBean("biz");
20         User user = new User();
21         user.setUname("小老虎");
22         biz.save(user);
23     }
24 
25 }

4.测试效果

技术分享

 

环绕增强

标签:static   framework   aop   domain   tac   property   lang   tostring   异常处理   

原文地址:http://www.cnblogs.com/myhzb/p/7537802.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!