Spring AOP (Aspect) Not executing

前端 未结 6 673
没有蜡笔的小新
没有蜡笔的小新 2021-02-05 08:18

I ams using Spring 2.5.6, asm 1.5.3, aspectjrt/aspectjweaver 1.6.1, cglib 2.1_3 In my Web based Spring application I have following class:

package uk.co.txttools         


        
相关标签:
6条回答
  • 2021-02-05 08:41

    If you havent tried already...try the xml based spring-aop configuration as follows:

        <aop:config>
        <aop:aspect ref="loggingAspect">
            <aop:pointcut expression="execution(* uk.co.txttools.web.controller.compose.PreviewMessageController.set*(..))" id="previewMessageControllerSetters"/>
            <aop:before method="setLoggingAdvice" pointcut-ref="previewMessageControllerSetters"/>
    
             // set other 2 pointcuts similarly....
            </aop:aspect>       
        </aop:config>
        <bean id="loggingAspect" class="uk.co.txttools.aspects.LoggingAspect" />
    
    0 讨论(0)
  • 2021-02-05 08:43

    Try this in your config file:

    <aop:aspectj-autoproxy proxy-target-class="true">
         <aop:include name="loggingAspect"/>
    </aop:aspectj-autoproxy>
    
    0 讨论(0)
  • 2021-02-05 08:45

    Finally SOLVED it.

    I think I was missing aspectj-maven-plugin. It required for spring to weaving of aspects. None tutorial provide this information though. Added following to my pom.xml.

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <version>1.0</version>
        <dependencies>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjrt</artifactId>
                <version>1.6.1</version>
            </dependency>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjtools</artifactId>
                <version>1.6.1</version>
            </dependency>
        </dependencies>
        <executions>
            <execution>
                <goals>
                    <goal>compile</goal>
                    <goal>test-compile</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <outxml>true</outxml>
            <verbose>true</verbose>
            <showWeaveInfo>true</showWeaveInfo>
            <aspectLibraries>
                <aspectLibrary>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-aspects</artifactId>
                </aspectLibrary>
            </aspectLibraries>
            <source>1.6</source>
            <target>1.6</target>
        </configuration>
    </plugin>
    

    Thanks guys

    0 讨论(0)
  • 2021-02-05 08:53

    I'm not sure if I did it properly but for me what solved it was adding @Component to the "Aspect'ed" class -

    @Aspect
    @Component
    public class PerformanceLogger {
    
        private Logger logger = LoggerFactory.getLogger(this.getClass());
    
        @Around("within(com.something.rest.service..*)")
        public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
            long start = System.currentTimeMillis();
            Object retVal = pjp.proceed();
            long end = System.currentTimeMillis();
            logger.debug(pjp.getSignature().toShortString() + " Finish: " + (end - start) + "ms");
            return retVal;
        }
    }
    

    (And just to close the loop - if you are using annotation based, don't forget adding @EnableAspectJAutoProxy to your Config class.

    @EnableAspectJAutoProxy
    
    0 讨论(0)
  • 2021-02-05 09:02

    For those who opted for JavaConfig, you can declare your Aspect as a bean and add the @EnableAspectJAutoProxy annotation to turn on auto-proxying :

    @Configuration
    @EnableAspectJAutoProxy
    @ComponentScan
    public class MyConfig {
        @Bean
        public LoggingAspect loggingAspect(){
            return new LoggingAspect();
        }
    }
    
    0 讨论(0)
  • 2021-02-05 09:02

    Only to make the list of possible answers complete:

    To me it looks like you are missing the following dependency in your maven pom.xml:

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>2.5.6</version>
    </dependency>
    
    0 讨论(0)
提交回复
热议问题