Thao-Nguyen Do opened SPR-15533 and commented

When @target is used in a PointCut, all beans created in the same context are proxied, although that PointCut does not match those beans.

This bug was already mentioned and according to that ticket also fixed (#6859), but this behavior is still present in later versions of Spring.

In our application context some beans cannot be proxied. These beans cannot be modified, so usage of @target PointCuts breaks our application. However, not using @target is also not possible, as our use case requires Aspects to be applied to all methods of a wide range of classes (including inherited and interface methods). Our desired behavior for aspects could not be implemented with other PointCut definitions.


Affects: 4.3.4

Issue Links: - #6859 @target() advices beans it should not

1 votes, 4 watchers

Comment From: spring-projects-issues

Frank Scheffler commented

I am experiencing the same problem when using "@target", as compared to "target". In fact, @target cannot be used in even the simplest Spring Boot application, as it tries to proxy all kinds of beans, e.g. configuration classes pulled in by Boot.

In my opinion, Spring's AspectJExpressionPointcut.matches() method, which suggests that it treats Spring beans as non-dynamic with respect to target, @target, et.al, conflicts with the implementation in RuntimeTestWalker.SubtypeSensitiveVarTypeTestVisitor.visit(), which explicitly treats target and @target differently. In fact, when using target in favor of @target, the context ramp-up is fine.

Comment From: spring-projects-issues

Juergen Hoeller commented

Unfortunately this is unlikely to see proper cycles spent on it over the next few months from our end here. If anybody is willing to provide a patch as a starting point, I'm happy to prioritize it...