Java / JSF / Tomcat / Spring-代理对象与原始对象的方法不同

|| 今天,我遇到了一个使我感到烦恼的问题,因为几乎所有代码都已经可以工作了(即使恢复到较旧的版本后也停止了工作)。 我正在Facelets页上访问Spring-Bean。 Spring将这些对象包装在Proxies中以使用方面和其他一些东西。 问题是,尝试访问bean的属性时出现异常。例外是这样的:
javax.el.PropertyNotFoundException: /customers.xhtml @23,27 value=\"#{customerBean.customer}\": Property \'customer\' not found on type $Proxy88
我肯定(!!)知道有相应的getter / setter方法。 到目前为止,我尝试过的事情: 将应用程序部署到另一个tomcat安装 清除所有tomcat缓存,即webapp目录 清洁Eclipse项目 使用javap检查相应的方法(以及那里的方法/属性) 改变bean的范围 更改bean的类名 更改spring bean-id 更改bean的serialVersionUID 无论我做什么,该类都不会以某种方式正确包装或未由类加载器正确加载。 有谁知道会导致这种问题的原因吗?我不知道可以额外尝试什么,因此非常感谢您提供任何建议! 提前致谢! 问候, 罗伯特     
已邀请:
        如果未正确配置加载时间编织,通常会发生这些错误。确保您不仅配置了加载时间编织器,而且还加载了适当的Java代理,或者确保应用程序服务器为您执行此操作。 请参阅spring文档以获取有关如何配置此环境的更多信息,例如第7.8.4.6章特定于环境的配置。尽管这涵盖了AOP的加载时间波动主题,但对于弹簧的其他需要加载时间波动的部分,其配置相同。     
        我还使用Tomcat 7,JSF 2,Spring 3,Spring Security 3。 我有同样的问题。更改织造配置没有帮助。 我的最终解决方案是在spring config中添加一行:
<aop:aspectj-autoproxy proxy-target-class=\"true\"/>  
您需要在类路径上使用CGLIB。 希望这对某人有帮助。 :)     
        好的,我发现了如何使用AspectJ编织来管理方法安全性。 您至少需要使用Spring-security 3.0.5,并且需要在spring-security.xml中使用正确的架构,至少: http://www.springframework.org/schema/security/spring-security-3.0.5.xsd 您需要添加spring-security-aspects作为依赖项:
<dependency>
   <groupId>org.springframework.security</groupId>
   <artifactId>spring-security-aspects</artifactId>             
   <version>3.0.5.RELEASE</version>
</dependency>
您可以将新属性\“ mode \”添加到全局方法安全性标签中:
<global-method-security pre-post-annotations=\"enabled\" mode=\"aspectj\"/>
我认为您还必须添加标准的Spring-configuration.xml标记,以启用AspectJ编织:
<context:load-time-weaver aspectj-weaving=\"on\"/>
而且还可以消除(删除)aop-proxy标签:
<aop:aspectj-autoproxy proxy-target-class=\"true\"/>
另外,使用Spring-security 3.1.0更好,但是比起您至少必须使用Spring 3.0.7。 希望这可以帮助 :)     
        尝试删除具有oneToMany字段的customerBean的域。     
        我认为您的bean实现了
Serializable
。我今天遇到了这个问题,Serializable对代理服务器做了一些奇怪的事情,我的方法都无法访问。摆脱Serializable,它应该可以工作。     

要回复问题请先登录注册