java - Spring,@Aspect,@AfterThrowing,黑屏响应

标签 java spring aspectj

  1. 我的应用程序类路径中有aspectjrt-1.5.4.jar、aspectjweaver-1.6.1.jar、org.springframework.aop-3.0.5.RELEASE.jar。

  2. 我的 applicationContext.xml 包含

    <aop:aspectj-autoproxy/>
    <bean id="loggerAspect" class="com.company.logging.LoggerAspect" />
    
  3. 我的 LoggerAspect.java 包含

    @Aspect
    public class LoggerAspect
    {
    
        @Before("execution( * com.company..*(..)) and !execution( * com.company.*.action..*(..))")
        public void logEntry(JoinPoint joinPoint)
        {
            Logger logger = Logger.getLogger(joinPoint.getTarget().getClass());
            String className = joinPoint.getTarget().getClass().getCanonicalName();
            logger.debug(className + " :: " + joinPoint.getSignature().getName() + " :: " + "Entry");
        }
    
        @AfterReturning("execution( * com.company..*(..)) and !execution( * com.company.*.action..*(..))")
        public void logExit(JoinPoint joinPoint)
        {
            Logger logger = Logger.getLogger(joinPoint.getTarget().getClass());
            String className = joinPoint.getTarget().getClass().getCanonicalName();
            logger.debug(className + " :: " + joinPoint.getSignature().getName() + " :: " + "Exit");
        }
    
    
        @AfterThrowing(pointcut = "execution(* com.company..*(..))", throwing = "throwable")
            public void logException(Throwable throwable)
        {
            System.out.println(throwable.getMessage());
        }
    
    }
    
  4. 如果我评论 logException 切入点,其他一切都会正常工作。 并生成进入和退出日志。 但是,如果我取消注释,则会出现以下异常。

  5. 我收到错误

java.lang.NullPointerException org.apache.struts2.convention.ConventionUnknownHandler.handleUnknownActionMethod(ConventionUnknownHandler.java:412) com.opensymphony.xwork2.DefaultUnknownHandlerManager.handleUnknownMethod(DefaultUnknownHandlerManager.java:102) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:439) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485) org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

6. 我做了以下更改

  • 使用了aspectjweaver-1.6.10.jar。并取出了两个旧 jar 。
  • 按照 Oleg 的提议进行了更改。 (这实际上是我的一个愚蠢的错误)。 我已使用我正在使用的最新方法更新了上面的 logException 方法。

我不再收到上述特定错误。然而现在,一旦调用应用程序的第一个 struts 操作 (home.action),响应就是空白屏幕。

如果我的 logException 方法有 pointcut = "execution(* com.company1..(..))" 其中 company1 不是我项目的有效包,一切正常。 但是如果我将它作为切入点=“执行( com.company..*(..))” 如果公司是我的项目的有效包,我对每个 struts 操作都得到空白响应

最佳答案

“我有aspectjrt-1.5.4.jar,aspectjweaver-1.6.1.jar”可能是你的问题。除了可能彼此不兼容之外,它们都是非常旧的版本。您应该升级到aspectjweaver 1.6.10 版本并删除aspectjrt——aspectjweaver 已经包含其中的所有类。

关于java - Spring,@Aspect,@AfterThrowing,黑屏响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116008/

相关文章:

Spring集成计划作业

java - Aspectj 与 android 库

java - IntelliJ IDEA + AspectJ

java - 使用 Deployer 进行 JMX 调用时出现 InstanceNotFoundException

java - Kafka-在JAAS配置中找不到“KafkaClient”条目

java - 避免Gradle插件之间的依赖关系/类路径冲突

java - JPA:如何保存具有一对一关系的两个实体?

java - Spring ClassPathXmlApplicationContext 在 spring conf 文件中创建所有 bean 的空实例?

hibernate - 如何配置 Spring Boot 应用程序以使用 aspectj 事务?

java - 如何从框架左侧制作垂直的按钮线?