AOP/Aspectj,SpringWebApplication中的Spring(4.0.5)不工作,在测试中它确实工作

AOP/Aspectj,SpringWebApplication中的Spring(4.0.5)不工作,在测试中它确实工作,spring,web,aop,aspectj,Spring,Web,Aop,Aspectj,我真的希望有人能帮助我,我正在尝试在我的web应用程序中创建一些非常简单的AOP操作。 不幸的是,它根本没有被触发。 以下是我的配置: web.xml(加载application.xml) scanbean类 豆子在那里,一切都开始了,没有任何错误。 方面bean。。。 注释 最后是豆子本身 @服务 @范围(“会议”) 公共类AdminBean实现了可序列化{ //一些代码。。。 @默认实体 公共空间与你的错误(){ 调试(“我在工作吗?”); } } 如果我编写一个简单的JUNIT测试

我真的希望有人能帮助我,我正在尝试在我的web应用程序中创建一些非常简单的AOP操作。 不幸的是,它根本没有被触发。 以下是我的配置: web.xml(加载application.xml)

scanbean类

豆子在那里,一切都开始了,没有任何错误。 方面bean。。。 注释

最后是豆子本身

@服务
@范围(“会议”)
公共类AdminBean实现了可序列化{
//一些代码。。。
@默认实体
公共空间与你的错误(){
调试(“我在工作吗?”);
}
}
如果我编写一个简单的JUNIT测试,它的工作方式与预期的一样。一旦我将它部署到服务器(tomcat)上。什么都不管用了。 我找到了1000个提示,但没有一个有效。我想我已经阅读了stackoverflow上的所有内容:),但没有找到解决方案。我真的很感激每一个提示

干杯

编辑:


我在上创建了一个小项目。我仍然没有把它运行起来。。如果有人有什么提示,请告诉我!谢谢大家!

我终于在我的“大”应用程序中也实现了。根本原因是我将所有spring/hibernate aso外部化了。图书馆。 事实上,我使用的是tomcat的共享库设置,我的所有spring库都在那个服务器上。只要不使用aspectj/SpringAOP,这就可以正常工作。 在我创建了一个包含libs的war文件(WEB-INF/lib)后,它立即开始工作


这也是有意义的,因为lib是由不同的类加载器加载的。。。希望它也能帮助别人

你的相位永远不会被拾取。
@Aspect
不是
@组件
,因此您的组件扫描永远不会拾取它。还要确保您没有扫描组件两次!确保只加载一次。此外,您的方面也有缺陷。一个环绕方面应该始终返回
对象
,并且您必须返回调用
继续
的结果。如果不这样做,则很有可能破坏程序的正常运行,因为此方面应用的所有内容都会突然返回
null
。抱歉,未能复制该部分:-/。我编辑了这篇文章。方面功能在测试中运行良好。。。还有其他建议吗?非常感谢。相信我,你的相位已经损坏,并且会损坏程序。它之所以有效,是因为您现在将它应用于void方法。一旦您将它应用于返回某些内容的方法,它就会崩溃。正如我在第一条评论中提到的,请确保您没有扫描相同的组件两次,如果您这样做了,那么如果您运气不好,您将有一个代理和未代理的实例。我现在更改了方面,以便它返回一个对象。我还将application.xml更改为
。但它仍然不成功。你能给我举个例子,说明我的组件是如何被扫描两次的吗?非常感谢。因为,正如我在第一条评论中提到的,您的
@方面
不是
@组件
,因此不会被检测到。您有
,但没有任何方面……我查看了您的github项目。您还没有使用maven aspectj插件来编译这些类。如果不使用此选项,您的代码如何工作?请你解释一下好吗?谢谢。你可能想看看这篇文章。我认为这是很好的解释:)
<!-- web.xml -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/application*.xml</param-value>
</context-param>
<!--application.xml--> 
<aop:aspectj-autoproxy proxy-target-class="true" /> <!-- i tried with and without proxy-->
<bean id="config" class="com.whatever.config.Configuration"/> <!-- beans are not definend in application.xml, but in a separate class-->
 @Configuration
 @PropertySource({ "classpath:/ui.properties" })
 @Import({ somclass.class, ScanBean.class})
 public class Configuration {

 }
 @Configuration
 @ComponentScan(basePackages = { "com.ui.common", "com.ui.aspects" })
 public class ScanBean {

   @Bean
   public DefaultEntityServiceAspect defaultEntityServiceAspect() {
     return new DefaultEntityServiceAspect();
   }
 }
 @Retention(RetentionPolicy.RUNTIME)
 public @interface DefaultEntity {}  
 // the aspect itself

 @Aspect
 public class DefaultEntityServiceAspect {

 private final Logger logger = Logger.getLogger(DefaultEntityServiceAspect.class);

   @Around("@annotation(com.ui.aspects.DefaultEntity)")
   public void setDefaultEntityFields(ProceedingJoinPoint joinPoint) throws Throwable {
      logger.warn("doing something 2 huhu");
      joinPoint.proceed();
   }
 }