2017-11-16 18:43:32 ERROR org.springframework.web.servlet.DispatcherServlet initServletBean:497 - Context initialization failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'commonController' defined in URL [jar:file:/home/work/online/WEB-INF/lib/web-mvc-2.2.8-20170816.145029-5.jar!/com/*/web/mvc/controller/CommonController.class]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.*.web.mvc.controller.CommonController]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class com.*.web.mvc.controller.CommonController

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:548)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)

at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:725)

at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)

at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:663)

at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:629)

at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:677)

at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:548)

at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:489)

at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)

at javax.servlet.GenericServlet.init(GenericServlet.java:158)

at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)

at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)

at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)

at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721)

at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:488)

at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411)

at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)

at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:467)

at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:338)

at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:428)

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

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

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)

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

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

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)

at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

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

Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.elong.web.mvc.controller.CommonController]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class com.elong.web.mvc.controller.CommonController

at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:212)

at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:109)

at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:445)

at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:331)

at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:291)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:422)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1573)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:540)

... 37 more

Caused by: java.lang.IllegalArgumentException: Cannot subclass final class class com.elong.web.mvc.controller.CommonController

at org.springframework.cglib.proxy.Enhancer.generateClass(Enhancer.java:446)

at org.springframework.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33)

at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)

at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)

at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)

at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:317)

at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:57)

at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:202)

... 44 more



@Controller

public final class CommonController {

    public CommonController() {

    }


    @RequestMapping({"/404.html"})

    public String PageNotFound() {

        return "common/404";

    }


    @RequestMapping({"/throw.html"})

    public String Throwable() {

        return "common/throw";

    }

}

原因是aop改写final类抛出的异常,异常中很明白的写出是因为final类不能被注入的原因,所以在相应的表达式中规定不改写此包里面的类即可。

    <beans:bean id="logPerformAspect" class="com.*.web.flight.loggs.perform.LogPerformAspect"/>

    <aop:config>

        <aop:pointcut id="logPoint" expression="(execution(public * com.*.web.flight..*.*(..))) and @annotation(org.springframework.web.bind.annotation.RequestMapping)"/>

        <aop:advisor pointcut-ref="logPoint" advice-ref="logPerformAspect"/>

    </aop:config>