为什么struts2 action自动被ProxyFactoryBean拦截?

问题描述

我用ProxyFactoryBean代理business层,通过strut2action来执行business对象的方法,business对象IOC到action中。执行发现每次action的方法也被代理了,并且business代理被执行了多次,我并没有对action进行任何代理,不知道什么原因,请高人指点一下!这是action:publicclassUserAction{privateUserManageruserManager;publicUserManagergetUserManager(){returnuserManager;}publicvoidsetUserManager(UserManageruserManager){this.userManager=userManager;}publicStringexecuteList(){ActionContextctx=ActionContext.getContext();/*this.userManager.setUserInfo((UserInfo)ctx.getSession().get("user"));this.userManager.setOperatorId("***************123***************");*/this.userManager.userList();return"success";}}这是business层:publicinterfaceUserManager{publicListuserList();publicvoiduserAdd();}publicclassUserManagerImplimplementsUserManager{privateStringOperatorId;privateUserInfouserInfo;publicvoidsetOperatorId(StringOperatorId){this.OperatorId=OperatorId;}publicStringgetOperatorId(){returnthis.OperatorId;}publicvoidsetUserInfo(UserInfouserInfo){this.userInfo=userInfo;}publicUserInfogetUserInfo(){returnthis.userInfo;}publicListuserList(){//this.OperatorId="***********123****************";System.out.println("************userlist************");returnnull;}publicvoiduserAdd(){}}这是通知:publicclassSecurityCheckAdviceimplementsMethodInterceptor{publicObjectinvoke(MethodInvocationinvocation)throwsThrowable{//Servicebusiness=(Service)invocation.getThis();System.out.println("operatorId==");System.out.println("(被调用方法接口类名:"+invocation.getMethod().getDeclaringClass().getName()+")");System.out.println("(被调用方法名:"+invocation.getMethod().getName()+")");returninvocation.proceed();}}这是配置文件:<beanid="userManagerImpl"class="jn.rbac.sys.user.business.UserManagerImpl"scope="prototype"><!--collaboratorsandconfigurationforthisbeangohere--></bean><beanid="userAction"class="jn.rbac.sys.user.action.UserAction"scope="prototype"><propertyname="userManager"ref="userManager"/></bean><!--advisor--><beanid="theSecurityCheckAdvice"class="jn.rbac.security.SecurityCheckAdvice"></bean><!--permissionaroundadvisor--><beanid="securityCheckAdvice"class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"><propertyname="advice"><reflocal="theSecurityCheckAdvice"/></property><propertyname="pattern"><value>.*user.*</value></property></bean><beanid="userManager"class="org.springframework.aop.framework.ProxyFactoryBean"><propertyname="proxyInterfaces"><value>jn.rbac.sys.user.business.UserManager</value></property><propertyname="target"><reflocal="userManagerImpl"/></property><propertyname="interceptorNames"><list><value>securityCheckAdvice</value></list></property></bean>这是输出结果:operatorId==(被调用方法接口类名:jn.rbac.sys.user.action.UserAction)(被调用方法名:executeList)operatorId==(被调用方法接口类名:jn.rbac.sys.user.business.UserManager)(被调用方法名:userList)operatorId==(被调用方法接口类名:jn.rbac.sys.user.business.UserManager)(被调用方法名:userList)operatorId==(被调用方法接口类名:jn.rbac.sys.user.business.UserManager)(被调用方法名:userList)从结果上看aop被执行了4次,第一次代理了action,后面三次代理了business层对象,我认为正确的结果应该是只输出一次,只代理userManager接口。请高手指点!!!

解决方案

解决方案二:
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶!
解决方案三:
道行浅,不明白
解决方案四:
正在看 过两天看看能回答不.
解决方案五:
这个挺明显的。<!--permissionaroundadvisor--><beanid="securityCheckAdvice"class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"><propertyname="advice"><reflocal="theSecurityCheckAdvice"/></property><propertyname="pattern"><value>.*user.*</value></property></bean>
解决方案六:
关于action被代理的情况,我发现是正则表达式写的有问题,把action的方法也包括进去了,struts的action代理可能自动引用了我定义的通知。改掉正则之后第一个AOP执行就去掉了。另外后面那三次是什么原因,怎么会重复执行的?请高人指点!!!
解决方案七:
应该是这个调用了三次/*this.userManager.setUserInfo((UserInfo)ctx.getSession().get("user"));this.userManager.setOperatorId("***************123***************");*/this.userManager.userList();
解决方案八:
回楼上,上面两行是注释!
解决方案九:
我当然知道是注释了,只是怀疑你那log会不会在注释之前执行的(怀疑你注释之后没有重新编译,如果这样你在浪费大家时间)。说真的这个解决办法很简单。你自己debug下或打下当前调用栈,结果马上就出来了。如果找到原因之后请告诉下大家、
解决方案十:
已经两年不来csdn,突然上来下,现在赚点分都这么难~。楼主,赶紧给下分~。

时间: 2024-09-21 17:12:24

为什么struts2 action自动被ProxyFactoryBean拦截?的相关文章

struts2中文件上传拦截器 是不是不能在多个action中引用???

问题描述 <global-results> <result name="input">/message.jsp</result></global-results><!--定义全局的返回视图--><action name="updateHead" class="updateHead"> <interceptor-ref name="fileUpload"

struts2 action 路径问题

问题描述 struts2 action 路径问题 之前发了个贴提问action找不到的问题http://ask.csdn.net/questions/189946 大家说的也都没能解决 自己又折腾了好几天,感觉似乎是页面上去找action的路径不对,我点击登录后他找的action路径是pages文件夹下的,本来是否应当是找struts.xml这个文件的路径? 我的工程结构的话这个正确路径应当是什么 又应当怎么去写这个路径? 挺急的!希望有大牛来帮帮忙啊~感激不尽 解决方案 好像是因为你这个jsp

struts2 Action如何命名才最规范、省事?

问题描述 struts2 Action可以用通配符命名,想知道怎么样配置最省事,不至于写死 1.是不是跳转页面都要通过ACTION来处理?2.本来打算用这种模式<action name="*_*" class="com.xx.{1}Action" method="{2}><result>/{2}{1}.jsp</result></action>比如我的action name叫 Useradd ,class为U

Java的Struts框架中Action的编写与拦截器的使用方法_java

Struts2 Action/动作动作是Struts2框架的核心,因为他们的任何MVC(模型 - 视图 - 控制器)框架.每个URL将被映射到一个特定的动作,它提供了来自用户的请求提供服务所需的处理逻辑. 但动作也提供其他两个重要的能力.首先,操作从请求数据的传输中起着重要的作用,通过向视图,无论是一个JSP或其它类型的结果.二,动作必须协助的框架,在确定结果应该渲染视图,在响应该请求将被退回. 创建动作:在Struts2的动作,唯一的要求是必须有一个无参数的方法返回String或结果的对象,必

Struts 2中通过Action自动接收参数

Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:(通过属性驱动式) a.定义:在Action类中定义属性,创建get和set方法: b.接收:通过属性接收参数,如:userName: c.发送:使用属性名传递参数,如:user1!add?userName=Magci: JSP: <form action="sys/login.action" method="post"> <input type=&qu

struts2 action找不到404

问题描述 struts2 action找不到404 刚学习struts2,做到登录功能的时候登录按钮点击之后就显示action404的页面 我的工程结构是这样的 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.s

struts2 action的静态方法里,怎么获取国际化信息呢?

问题描述 struts2 action的静态方法里,怎么获取国际化信息呢? RT struts2 action的静态方法里,怎么获取国际化信息呢? 解决方案 http://blog.csdn.net/u014201191/article/details/44980071 这是我的博客链接,国际化问你你一看就明白了... 解决方案二: 在桌面,新建mess.txt文件,内容 user = 用户名 pass= 密码 等. 然后改后缀为 .properties (mess.properties文件)

Struts2 标签自动生成id策略?

问题描述 怎样控制Struts2 的标签id生成策略啊?需求是这样的:<s:a href="xxx" />如果我没有指明 id 属性的话,struts2会自动生成一个,而现在我不想要它自动生成的 id 属性?how to do?(ps:我想modify 它的a.ftl文件,其中有这样的一段话:<#if parameters.id?if_exists != ""> id="${parameters.id?html}"<

struts2.0-初学struts2 action问题,,求教

问题描述 初学struts2 action问题,,求教 输入http://localhost:8080/qiaoliang_demo/getBarcode 解决方案 感觉是包没导好,,,,NOTCLASSFOUND 解决方案二: Struts2的Action的线程安全问题struts2 action初始化参数问题struts2中JSP与Action间传值的问题 解决方案三: 不是一般都写failure的么(貌似这个没硬性要求),你肯定是execute方法里那一串貌似解析条形码的有问题,你应该贴c