Spring AOP auf Service-Ebene
Brauche ich etwas Hilfe mit Spring AOP.
Ich habe den folgenden code:
@Service
public class UserSecurityService implements UserDetailsService {
@Autowired
private UserService userService;
....
}
@Service
public class UserService extends CrudService<User, UserRepository> {
public UserService() {
super();
}
@Autowired
public UserService(UserRepository repository) {
super(repository);
this.repository = repository;
}
....
}
@Repository
interface UserRepository extends JpaRepository<User, String> {
...
}
application-context.xml
<import resource="classpath*:spring/application-context-db.xml" />
<import resource="classpath*:spring/application-context-aop.xml" />
<import resource="classpath*:spring/application-context-mail.xml" />
<import resource="application-context-security.xml" />
<context:component-scan base-package="com.xpto">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository" />
</context:component-scan>
application-context-aop.xml
<aop:aspectj-autoproxy />
<aop:config>
<aop:aspect id="serviceLoggingAspect" ref="serviceLoggingAspectBean">
<aop:pointcut id="servicePointcut"
expression="@within(org.springframework.stereotype.Service)" />
<aop:before method="before" pointcut-ref="servicePointcut" />
<aop:after-returning method="afterReturning" pointcut-ref="servicePointcut" returning="result" />
<aop:after-throwing method="afterThrowing" pointcut-ref="servicePointcut" throwing="exception" />
</aop:aspect>
</aop:config>
Wenn ich versuche zu laden meine Anwendung auf Tomcat, bekomme ich die folgende exception:
Caused by: java.lang.IllegalArgumentException: Can not set com.xpto.user.service.UserService field com.xpto.user.security.service.UserSecurityService.userService to com.sun.proxy.$Proxy57
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
at java.lang.reflect.Field.set(Field.java:680)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:510)
... 35 more
Habe ich die gleiche Konfiguration auf Web-Ebene, um die Protokollierung meiner Anwendung, und es funktioniert gut, aber wenn ich mir die AOP bei der Service-layer bekomme ich diese exception.
Ich bin mit Spring MVC und web.xml ich konfiguriert ist zum laden von zwei unterschiedlichen Kontexten, man lädt nur die @Controller und die anderen Lasten, @Repository und @Service.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie nicht die Injektion einer Schnittstelle, so müssen Sie CGLIB-proxies, die Frühjahr Referenz-Handbuch Staaten:
Frühjahr hat beschlossen, eine J2SE-proxy (
com.sun.proxy.$Proxy57
) wahrscheinlich, weilCrudService
eine Schnittstelle implementiert. So erzwingen Sie die Verwendung von CGLIB können Sie optimieren Sie Ihr XML:@samlewis: Dieser Satz, den Sie geschrieben schob mich zu erstellen Schnittstellen zu meinen Dienstleistungen und, wenn ich das täte, LoggingAspect funktionierte wirklich gut. Also, ich bin nicht mit proxy-target-class= " true.
Vielen Dank für Ihre Zeit.