2014-09-05 62 views
5

不確定發生了什麼問題,但AOP似乎並沒有在我的設置中使用spring boot(v1.1.6)。Spring Boot AOP加載時間編織

@Configuration 
@ComponentScan 
@EnableJpaRepositories 
@EnableTransactionManagement 
@EnableAutoConfiguration 
@EnableCaching 
@EnableLoadTimeWeaving 
public class Application { 
    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 

而在切面類

@Aspect 
public class MyAspect { 
    @AfterReturning(pointcut = "execution(private * com.myapp.service.MyService.test(..)) && args(str1,str2)", argNames = "str1,str2") 
    public void advice(String str1, String str2) throws IOException { 
     System.out.println("Advising after returning"); 
    } 
} 

在需要的建議

@Service 
public class MyService { 
    public void test(String str1, String str2) throws IOException { 
    System.out.println("Test method in service"); 
    //rest of the implementation 
    } 
} 

服務類我也有像這樣

一個META-INF/aop.xml文件
<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"> 
<aspectj> 
    <weaver> 
     <!-- only weave classes in our application-specific packages --> 
     <include within="com.myapp.*"/> 
    </weaver> 

    <aspects> 
     <!-- weave in just this aspect --> 
     <aspect name="com.myapp.aspect.MyAspect"/> 
    </aspects> 

</aspectj> 

當我用-ja運行應用程序時vaagent:路徑/到/彈簧儀器4.1.0.RELEASE.jar

我得到這個消息控制檯

2014-09-05 08:42:12.500 INFO 65053 --- [   main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 
[[email protected]] warning javax.* types are not being woven because the weaver option '-Xset:weaveJavaxPackages=true' has not been specified 
2014-09-05 08:42:13.114 INFO 65053 --- [   main] o.s.j.e.a.AnnotationMBeanExporter  : Registering beans for JMX exposure on startup 
2014-09-05 08:42:13.156 INFO 65053 --- [   main] o.s.b.a.e.jmx.EndpointMBeanExporter  : Registering beans for JMX exposure on startup 
[[email protected]] error can't determine implemented interfaces of missing type org.springframework.security.config.http.SessionCreationPolicy 
when weaving type org.springframework.boot.actuate.autoconfigure.ManagementServerProperties$Security 
when weaving classes 
when weaving 
[Xlint:cantFindType] 
[[email protected]] error can't determine implemented interfaces of missing type org.springframework.security.config.http.SessionCreationPolicy 
when weaving type org.springframework.boot.actuate.autoconfigure.ManagementServerProperties$Security 
when weaving classes 
when weaving 
[Xlint:cantFindType] 

沒有與建議情況,雖然上。它不會開火。

我做錯了什麼?

回答

0

爲了勸你需要使用一個特權方面私有方法:

public privileged aspect MyAspect { 
    // ... 
} 

AspectJ documentation說:

限制:特權方面不支持註釋樣式。

所以請使用本機語法,而不是@AspectJ風格。然而,在你做這件事之前,測試一下非特權的註釋風格的方面是否像預期的那樣按照公共方法工作,以排除你的方面的其他原因。

相關問題