Spring MVC中没有在Aspect中注入自动关联

我无法@Autowire使用Aspect中的服务层实例。在Aspect中,对@Autowiredbean

的引用为NULL并引发NullPointerException。任何帮助都感激不尽。我想,我搞砸了配置。

以下是我的servlet-context.xml

<!-- Activates various annotations to be detected in bean classes -->

<context:annotation-config />

<context:spring-configured />

<!-- Scans the classpath of this application for @Components to deploy as beans -->

<context:component-scan base-package="xx.yy" />

<!-- an @AspectJ aspect will be interpreted as an aspect by Spring AOP and beans in the context will be advised accordingly -->

<aop:aspectj-autoproxy />

<beans:bean id="loggingAspect" class="xx.yy.aop.aspects.LoggingAspect" />

<beans:bean id="authenticationAspect" class="xx.yy.aop.aspects.AuthenticationAspect" />

<!-- Enables the Spring MVC @Controller programming model -->

<annotation-driven />

以下是我的观点:

@Configurable

@Component

@Aspect

public class AuthenticationAspect {

private static final Logger logger = LoggerFactory.getLogger(AuthenticationAspect.class);

@Autowired

private LoginService loginService;

//....

}

这是我的控制器,使用@Authentication上面定义的注释:

@Controller

@RequestMapping("/user")

public class UsersController {

@Autowired

private UserService userService;

@Authenticate

@RequestMapping(value="/{userId}/profile", method=RequestMethod.GET)

public String displayUser(WebRequest webRequest, @PathVariable("userId") String userId, Model model) {

User user = userService.findUser(Long.valueOf(userId));

model.addAttribute("user", user);

model.addAttribute("AccordionMenuTab","5");

model.addAttribute("selectedLink","profile");

return "profile";

}

我收到以下异常:

Oct 8, 2011 3:12:48 AM org.apache.catalina.core.StandardWrapperValve invoke

SEVERE: Servlet.service() for servlet appServlet threw exception

java.lang.NullPointerException

at xx.yy.controller.UsersController.displayUser_aroundBody1$advice(UsersController.java:28)

at xx.yy.controller.UsersController.displayUser(UsersController.java:1)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)

at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)

at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)

at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

at java.lang.Thread.run(Thread.java:662)

回答:

请参阅此文档:

7.8.3使用Spring IoC配置AspectJ方面

当将AspectJ方面与Spring应用程序一起使用时,既自然又希望能够使用Spring配置此类方面。AspectJ运行时本身负责方面的创建,通过Spring配置AspectJ创建的方面的方法取决于方面所使用的AspectJ实例化模型(“

per-xxx”子句)。

AspectJ的大多数方面都是单例方面。这些方面的配置非常简单:只需创建一个照常引用方面类型的bean定义,并包含bean属性’factory-

method =“ aspectOf”’。这样可以确保Spring通过向AspectJ索要长宽比实例,而不是尝试自己创建实例来获得长宽比实例。例如:

<bean id="profiler" class="com.xyz.profiler.Profiler"

factory-method="aspectOf" />

以上是 Spring MVC中没有在Aspect中注入自动关联 的全部内容, 来源链接: utcz.com/qa/418554.html

回到顶部