亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

@PostConstruct注解執行兩次怎么解決?

@PostConstruct注解執行兩次怎么解決?

長風秋雁 2019-02-24 18:51:20
因需求在項目中增加了項目啟動時執行的方法,但是由于web.xml中的配置必須有ContextLoaderListener和DispatcherServlet 所以項目啟動時在創建對象時和對象注入時會執行兩次該方法 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 防止Spring內存溢出監聽器 --> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> 調出棧方法顯示如下: Thread.st=====================java.lang.Thread.getStackTrace(Thread.java:1559) Thread.st=====================com.mortgage.controller.init.InitQuery.queryAK(InitQuery.java:25) Thread.st=====================sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) Thread.st=====================sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) Thread.st=====================sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) Thread.st=====================java.lang.reflect.Method.invoke(Method.java:498) Thread.st=====================org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:366) Thread.st=====================org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:311) Thread.st=====================org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:134) Thread.st=====================org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409) Thread.st=====================org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1581) Thread.st=====================org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:554) Thread.st=====================org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) Thread.st=====================org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) Thread.st=====================org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) Thread.st=====================org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) Thread.st=====================org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) Thread.st=====================org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759) Thread.st=====================org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) Thread.st=====================org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) Thread.st=====================org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444) Thread.st=====================org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326) Thread.st=====================org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) Thread.st=====================org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4633) Thread.st=====================org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5095) Thread.st=====================org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) Thread.st=====================org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1425) Thread.st=====================org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1415) Thread.st=====================java.util.concurrent.FutureTask.run(FutureTask.java:266) Thread.st=====================org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) Thread.st=====================java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) Thread.st=====================org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941) Thread.st=====================org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:839) Thread.st=====================org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) Thread.st=====================org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1425) Thread.st=====================org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1415) Thread.st=====================java.util.concurrent.FutureTask.run(FutureTask.java:266) Thread.st=====================org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) Thread.st=====================java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) Thread.st=====================org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941) Thread.st=====================org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:258) Thread.st=====================org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) Thread.st=====================org.apache.catalina.core.StandardService.startInternal(StandardService.java:422) Thread.st=====================org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) Thread.st=====================org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:770) Thread.st=====================org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) Thread.st=====================org.apache.catalina.startup.Catalina.start(Catalina.java:657) Thread.st=====================sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) Thread.st=====================sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) Thread.st=====================sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) Thread.st=====================java.lang.reflect.Method.invoke(Method.java:498) Thread.st=====================org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:355) Thread.st=====================org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:495) 啟動 十一月 20, 2017 2:35:16 下午 org.apache.catalina.core.ApplicationContext log 信息: Initializing Spring FrameworkServlet 'SpringMVC' Thread.st=====================java.lang.Thread.getStackTrace(Thread.java:1559) Thread.st=====================com.mortgage.controller.init.InitQuery.queryAK(InitQuery.java:25) Thread.st=====================sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) Thread.st=====================sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) Thread.st=====================sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) Thread.st=====================java.lang.reflect.Method.invoke(Method.java:498) Thread.st=====================org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:366) Thread.st=====================org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:311) Thread.st=====================org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:134) Thread.st=====================org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409) Thread.st=====================org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1581) Thread.st=====================org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:554) Thread.st=====================org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) Thread.st=====================org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) Thread.st=====================org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) Thread.st=====================org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) Thread.st=====================org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) Thread.st=====================org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759) Thread.st=====================org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) Thread.st=====================org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) Thread.st=====================org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668) Thread.st=====================org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634) Thread.st=====================org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682) Thread.st=====================org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553) Thread.st=====================org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494) Thread.st=====================org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) Thread.st=====================javax.servlet.GenericServlet.init(GenericServlet.java:158) Thread.st=====================org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1174) Thread.st=====================org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1090) Thread.st=====================org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:980) Thread.st=====================org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4819) Thread.st=====================org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5129) Thread.st=====================org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) Thread.st=====================org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1425) Thread.st=====================org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1415) Thread.st=====================java.util.concurrent.FutureTask.run(FutureTask.java:266) Thread.st=====================org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) Thread.st=====================java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) Thread.st=====================org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941) Thread.st=====================org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:839) Thread.st=====================org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) Thread.st=====================org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1425) Thread.st=====================org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1415) Thread.st=====================java.util.concurrent.FutureTask.run(FutureTask.java:266) Thread.st=====================org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) Thread.st=====================java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) Thread.st=====================org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941) Thread.st=====================org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:258) Thread.st=====================org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) Thread.st=====================org.apache.catalina.core.StandardService.startInternal(StandardService.java:422) Thread.st=====================org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) Thread.st=====================org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:770) Thread.st=====================org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) Thread.st=====================org.apache.catalina.startup.Catalina.start(Catalina.java:657) Thread.st=====================sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) Thread.st=====================sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) Thread.st=====================sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) Thread.st=====================java.lang.reflect.Method.invoke(Method.java:498) Thread.st=====================org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:355) Thread.st=====================org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:495) 啟動 從上代碼中可看到執行兩次的具體情況 經查閱 有人說將@Component注解改為@Service注解即可 但嘗試后發想并沒有起作用 而且由于本項目不能注掉ContextLoaderListener 故想知道如果解決此問題
查看完整描述

4 回答

?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

后經過排查發現原因還是掃描了兩遍`<context-param>

    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-servlet.xml,classpath:spring-shiro.xml,classpath:spring-redis.xml</param-value>
</context-param>` 以及 `<init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-servlet.xml</param-value>
    </init-param>` 后將ContextLoaderListener注掉并將其掃描都放進DispactherServlet下啟動變為一次
查看完整回答
反對 回復 2019-03-01
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

spring_application啟動除controller以外的bean,spring_servlet啟動controller

查看完整回答
反對 回復 2019-03-01
?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

看一下,是不是在xml配置里配置了兩次包掃描

查看完整回答
反對 回復 2019-03-01
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

先排除是否有包掃描配置重復,以前我就發現這個問題。

查看完整回答
反對 回復 2019-03-01
  • 4 回答
  • 0 關注
  • 2627 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號