当前位置:编程学习 > JAVA >>

springMVC使用aop的问题,实现用户操作监控

目前需求是进行用户的action操作监控,用户名、URL、等信息记录下。
然后还有每个action中的service被调用的次数也要记录,(这点最不好弄)。
action我使用beanName进行监控,代码:

<bean id="aspect" name="aspect" class="com.cssnb.admin.aop.main.UserActive"></bean>
<bean name="loggingAutoProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
            <list>
<value>*Action</value>
            </list>
        </property>
<property name="interceptorNames">
<list>
<value>aspect</value>
</list>
</property>
</bean>

service的我这么配置的,但不能进入方法,代码:

<aop:config>
<aop:aspect id="serviceAspect" ref="serviceMonitor">
<aop:pointcut id="service_cut" expression="execution(* com.cssnb..service.*.*(..))" />
<aop:before pointcut-ref="service_cut" method="doBefore"/>
<aop:after pointcut-ref="service_cut" method="doAfter"/>
<aop:around pointcut-ref="service_cut" method="doAround"/>
</aop:aspect>
</aop:config>
<bean name="serviceMonitor" class="com.cssnb.admin.aop.main.UserMonitor"></bean>

之前的项目使用的是ssi,是可以监听到service,但不能用下面的方法监听action,
反倒这个项目用springMVC,service不能监听,action却可以了。
想知道问题:
一:

<property name="beanNames">
            <list>
<value>*Action</value>
            </list>
        </property>

action的beanNames有没有其他方法配置,*Action是我自己蒙出来的!
二:(重点问题)service在springMVC里怎么进行监听的? --------------------编程问答-------------------- 第一个问题:spring中的BeanNameAutoProxyCreator实现了自动代理,属性beanNames是为了方便切面一系列有共同命名规范的类。支持ant-stype表达式。当遇到符合要求的beanName就借助拦截器来执行相依的操作。个人觉得*Action可以作为Action类的后缀,从而实现切面action,或者使用*Controller,主要是要求这类action或controller按照一定的命名规范来书写。
第二个问题:spring MVC并没有要求一定要使用service层,只是我们在设计系统时,采用了分层的设计思路而已。spring mvc给我们提供了从前台请求到后台Controller处理一种解决方案。至于切面service是可以的。我做了个试验,可以成功切自己的service方式。
给你提供几个思路来检查配置或代码:
1.确保aop配置文件被加载
2.expression中可以先写一个具体的类,具体的方法,测试有没有到达切面方法
3.如果上述可以做到,把表达式一步一步扩展到通配符格式。 --------------------编程问答--------------------
引用 1 楼 lvzg_005 的回复:
第一个问题:spring中的BeanNameAutoProxyCreator实现了自动代理,属性beanNames是为了方便切面一系列有共同命名规范的类。支持ant-stype表达式。当遇到符合要求的beanName就借助拦截器来执行相依的操作。个人觉得*Action可以作为Action类的后缀,从而实现切面action,或者使用*Controller,主要是要求这类ac……

第一个问题:我又看了下代码,我还真疏忽了,既然是beanNames,肯定是类名了,我的命名规则就是Action和Controller,这个算是不是问题了。
第二个问题:expression="execution(* com.cssnb..service.*.*(..))",我这个写法在另外一个项目是可以用的,但是这个项目不知道何原因,就是进不去方法。但改成action就可以了!很纳闷啊~~ --------------------编程问答-------------------- sammyke,能否加个QQ聊聊,最近搞这个头都憋大了也没弄出来...QQ:413310600,请加一下...
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,