您的位置:首页 > 编程语言 > Java开发

spring aop 获取拦截类中的属性的值

2016-02-18 15:54 405 查看
最近搭建一个ssh的通用架子时,想做个通用日志的拦截方法,可以利用反射获取拦截类中的属性

不多说,上代码

日志类

public class MyLog {
public void doBefore(JoinPoint jp) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
Field f = jp.getTarget().getClass().getDeclaredField("username");//获取属性-->Field
f.setAccessible(true);//如果是私有的 先要设置可访问
String user = (String) f.get(jp.getTarget());//获取值,这个get()方法重点是参数,参数是你要获取的类
logStr = user + " 进行了" + jp.getTarget().getClass().getName() + " 类的 "+ jp.getSignature().getName()+" 方法开始执行 ";logger.info(logStr);}
}
}

拦截类

 com.xxx.xxx.controller包下的ServerManagerController.java



public class ServerManagerController extends BaseAction{

private String username = "";
@Autowired

/**
* 管理页面
* @return
*/
@RequestMapping(value = "/toServerManager")
public String toServerManager(){
UserLogInfo user = (UserLogInfo)session.getAttribute("userLogInfo");
this.username = user.getUsername();
return "/jsp/examine/serverManager";
}
}


spring-log.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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd"> 
<!--
配置日志 使用Aop 记录日志
注意:
1). 此处proxy-target-class="true" 否则Action内的参数会被拦截掉,导致action内无法获得前台传递的参数
2). Action需交给spring容器去管理
-->
<aop:config expose-proxy="true" proxy-target-class="true">
<aop:aspect  id="aopRiZhiAspect" ref="myRiZhi">
<!-- 对哪些方法进行日志记录, 此处屏蔽action内的set get方法 -->
<aop:pointcut id="aopRiZhi" expression="(execution(* com.xxx.*.controller.*.*(..)) )" />   <!--  and (!execution(* com.hylanda.*.action.*.set*(..)) ) and (!execution(* com.hylanda.*.action.*.get*(..)) ) -->
<aop:before pointcut-ref="aopRiZhi" method="doBefore"/>
<aop:after pointcut-ref="aopRiZhi" method="doAfter"/>
<aop:around pointcut-ref="aopRiZhi" method="doAround"/>
</aop:aspect>
</aop:config>

<beans>
<bean id="myRiZhi" class="com.xxx.util.MyLog"></bean>   <!-- Aop日志类 -->
</beans>

</beans>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java spring ssh aop log