精华内容
下载资源
问答
  • context:component-scan使用说明

    万次阅读 多人点赞 2013-11-14 12:43:12
    在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean 注意:如果配置了那么标签就可以不用再xml中...

       在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean

    注意:如果配置了<context:component-scan>那么<context:annotation-config/>标签就可以不用再xml中配置了,因为前者包含了后者。另外<context:component-scan>还提供了两个子标签

    1.        <context:include-filter>

    2.       <context:exclude-filter>

    在说明这两个子标签前,先说一下<context:component-scan>有一个use-default-filters属性,该属性默认为true,这就意味着会扫描指定包下的全部的标有@Component的类,并注册成bean.也就是@Component的子注解@Service,@Reposity。所以如果仅仅是在配置文件中这么写

    <context:component-scan base-package="tv.huan.weisp.web"/>

     Use-default-filter此时为true那么会对base-package包或者子包下的所有的进行java类进行扫描,并把匹配的java类注册成bean。

     

     可以发现这种扫描的粒度有点太大,如果你只想扫描指定包下面的Controller,该怎么办?此时子标签<context:incluce-filter>就起到了勇武之地。如下所示

    <context:component-scan base-package="tv.huan.weisp.web .controller">  

    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>   

    </context:component-scan>  

    这样就会只扫描base-package指定下的有@Controller下的java类,并注册成bean

    但是因为use-dafault-filter在上面并没有指定,默认就为true,所以当把上面的配置改成如下所示的时候,就会产生与你期望相悖的结果(注意base-package包值得变化)

    <context:component-scan base-package="tv.huan.weisp.web">  

    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>   

    </context:component-scan>  

    此时,spring不仅扫描了@Controller,还扫描了指定包所在的子包service包下注解@Service的java类

    此时指定的include-filter没有起到作用,只要把use-default-filter设置成false就可以了。这样就可以避免在base-packeage配置多个包名这种不是很优雅的方法来解决这个问题了。

    另外在我参与的项目中可以发现在base-package指定的包中有的子包是不含有注解了,所以不用扫描,此时可以指定<context:exclude-filter>来进行过滤,说明此包不需要被扫描。综合以上说明

    Use-dafault-filters=”false”的情况下:<context:exclude-filter>指定的不扫描,<context:include-filter>指定的扫描

     

    展开全文
  • @Component注解的含义

    万次阅读 多人点赞 2017-05-04 15:41:20
    “无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。...4、@component (把普通pojo实例化到spring容...

     “无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点人工智能教程可以跳转到教程。

    一、注解分类

    1、@controller:   controller控制器层(注入服务)
    2、@service :      service服务层(注入dao)
    3、@repository :  dao持久层(实现dao访问)
    4、@component:  标注一个类为Spring容器的Bean,(把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)

    二、@Component 注解含义

     @Component: 标注Spring管理的Bean,使用@Component注解在一个类上,表示将此类标记为Spring容器中的一个Bean。

     

    三、基于@Component扩展的注解

    @Repository

    @Component注解的扩展,被@Repository注解的POJO类表示DAO层实现,从而见到该注解就想到DAO层实现,使用方式和@Component相同;

     

    @Service

    @Component注解的扩展,被@Service注解的POJO类表示Service层实现,从而见到该注解就想到Service层实现,使用方式和@Component相同;

     

    @Controller

    @Component注解的扩展,被@Controller注解的类表示Web层实现,从而见到该注解就想到Web层实现,使用方式和@Component相同;

    Tips:  使用@Component,@Service,@Controller,@Repository注解的类,表示把这些类纳入到spring容器中进行管理,同时也是表明把该类标记为Spring容器中的一个Bean。


    四、component的扫描组件

    下面写这行配置是引入component的扫描组件 

    <context:component-scan base-package=”com.mmnc”>    

    其中base-package为指定需要扫描的包(含所有子包) ,扫描被@Service、@Controller、@Repository、@Component等注解标注的Java类,将其扫描注入到Spring容器,注入成Bean:

    • @Service用于标注业务层组件 
    • @Controller用于标注控制层组件(如struts中的action) 
    • @Repository用于标注数据访问组件,即DAO组件. 
    • @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注,标识为一个Bean。    

    五、方法初始化和销毁

    从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解: @PostConstruct和@PreConstruct ,这两个注解被用来修饰一个非静态的void()方法,而且这个方法不能有抛出异常声明,标注方法的初始化和销毁,当你需要在系统启动时提前设置一下变量或者设置值操作时,可以使用@PostConstruct注解进行项目启动时设置来完成,当你需要处理关闭资源或者发送通知相关操作时可以使用@PreConstruct 完成。

    1. @PostConstruct注解

    被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。

    2. @PreDestroy注解

    被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。
     

    加载顺序如图:


    在Spring中可以使用以下方式指定初始化方法和销毁方法(方法名任意):

    //对象创建并赋值之后调用
    @PostConstruct
    public void init() { 
      System.out.println("对象创建并赋值之后调用...");
    } 

    //容器移除对象之前
    @PreDestroy
    public void detory(){
    	System.out.println("容器移除对象之前执行...");
    }
    

    3. 示例

    @Controller
    @Lazy(false)
    public class ServletInit {
    
    	@Autowired
    	private PCASigninServlet  pcaSigninServlet;
    	@Autowired
    	private PCASignoutServlet pcaSignoutServlet;
    	@Autowired
    	private PCAInitServlet pcaInitServlet;
    	@Autowired
    	private PCALogoutServlet pcaLogoutServlet;
    	@Autowired
    	private PCAInfoServlet pcaInfoServlet;
    	@Autowired
    	private HelloServlet helloServlet;
    	
    	@Autowired @Qualifier("handler")
    	private WebAppContext webapp;
    
    	
    	@PostConstruct
    	void init(){
    	     Server server = new Server(8848);
    	        ServletContextHandler contextHander = new ServletContextHandler(ServletContextHandler.SESSIONS);  
    	        contextHander.setContextPath("/");  
    	        System.out.println("start init");
    	        HandlerCollection hc =new HandlerCollection();  
    	        hc.setHandlers(new Handler[]{webapp, contextHander});
    	        server.setHandler(hc);  
    	        System.out.println("addServlet /hello");
    	        contextHander.addServlet(new ServletHolder(helloServlet), "/hello");
    	        contextHander.addServlet(new ServletHolder( pcaSigninServlet), "/pca/signin");  
                contextHander.addServlet(new ServletHolder( pcaSignoutServlet), "/pca/signout");
                contextHander.addServlet(new ServletHolder( pcaInitServlet), "/pca/init");      
                contextHander.addServlet(new ServletHolder( pcaLogoutServlet), "/pca/logout");  
                contextHander.addServlet(new ServletHolder( pcaInfoServlet), "/pca/info");     
    	        
    	        try
    			{
    	        	System.out.println("server start");
    				server.start();
    				server.join();  
    				System.out.println("server stop");
    			} catch (Exception e)
    			{
    				e.printStackTrace();
    			}  
    	}
    }

     

    展开全文
  • - JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning - Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: Failed to rea

    错误信息:

     

    - JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning
    - Context initialization failed
    org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [E:\gold_work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\gold_public\WEB-INF\classes\com\golddashi\base\thirdpay\rongbao\configure\RBService.class]; nested exception is org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet: file [E:\gold_work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\gold_public\WEB-INF\classes\com\golddashi\base\thirdpay\rongbao\configure\RBService.class]; nested exception is java.lang.IllegalArgumentException
    	at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:290)
    	at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:242)
    	at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84)
    	at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73)
    	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1438)
    	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1428)
    	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:185)
    	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:139)
    	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:108)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    	at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
    	at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
    	at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
    	at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)
    	at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389)
    	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294)
    	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
    	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4994)
    	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5492)
    	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    	at java.util.concurrent.FutureTask.run(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet: file [E:\gold_work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\gold_public\WEB-INF\classes\com\golddashi\base\thirdpay\rongbao\configure\RBService.class]; nested exception is java.lang.IllegalArgumentException
    	at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:56)
    	at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80)
    	at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:102)
    	at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:266)
    	... 32 more
    Caused by: java.lang.IllegalArgumentException
    	at org.springframework.asm.ClassReader.<init>(Unknown Source)
    	at org.springframework.asm.ClassReader.<init>(Unknown Source)
    	at org.springframework.asm.ClassReader.<init>(Unknown Source)
    	at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:53)
    	... 35 more
    十一月 01, 2016 7:55:49 下午 org.apache.catalina.core.StandardContext listenerStart
    严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
    org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [E:\gold_work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\gold_public\WEB-INF\classes\com\golddashi\base\thirdpay\rongbao\configure\RBService.class]; nested exception is org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet: file [E:\gold_work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\gold_public\WEB-INF\classes\com\golddashi\base\thirdpay\rongbao\configure\RBService.class]; nested exception is java.lang.IllegalArgumentException
    	at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:290)
    	at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:242)
    	at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84)
    	at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73)
    	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1438)
    	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1428)
    	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:185)
    	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:139)
    	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:108)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    	at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
    	at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
    	at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
    	at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)
    	at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389)
    	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294)
    	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
    	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4994)
    	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5492)
    	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    	at java.util.concurrent.FutureTask.run(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet: file [E:\gold_work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\gold_public\WEB-INF\classes\com\golddashi\base\thirdpay\rongbao\configure\RBService.class]; nested exception is java.lang.IllegalArgumentException
    	at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:56)
    	at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80)
    	at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:102)
    	at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:266)
    	... 32 more
    Caused by: java.lang.IllegalArgumentException
    	at org.springframework.asm.ClassReader.<init>(Unknown Source)
    	at org.springframework.asm.ClassReader.<init>(Unknown Source)
    	at org.springframework.asm.ClassReader.<init>(Unknown Source)
    	at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:53)
    	... 35 more
    
    十一月 01, 2016 7:55:49 下午 org.apache.catalina.core.StandardContext startInternal
    严重: Error listenerStart
    十一月 01, 2016 7:55:49 下午 org.apache.catalina.core.StandardContext startInternal
    严重: Context [/gold_public] startup failed due to previous errors
    十一月 01, 2016 7:55:49 下午 org.apache.catalina.core.ApplicationContext log
    信息: Closing Spring root WebApplicationContext
    - Closing Root WebApplicationContext: startup date [Tue Nov 01 19:55:49 GMT+08:00 2016]; root of context hierarchy
    - Exception thrown from ApplicationListener handling ContextClosedEvent
    java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: Root WebApplicationContext: startup date [Tue Nov 01 19:55:49 GMT+08:00 2016]; root of context hierarchy
    	at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:347)
    	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:334)
    	at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1049)
    	at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1010)
    	at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:559)
    	at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:143)
    	at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:5035)
    	at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5687)
    	at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
    	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    	at java.util.concurrent.FutureTask.run(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    - Exception thrown from LifecycleProcessor on context close
    java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: Root WebApplicationContext: startup date [Tue Nov 01 19:55:49 GMT+08:00 2016]; root of context hierarchy
    	at org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:360)
    	at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1057)
    	at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1010)
    	at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:559)
    	at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:143)
    	at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:5035)
    	at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5687)
    	at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
    	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    	at java.util.concurrent.FutureTask.run(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    十一月 01, 2016 7:55:49 下午 org.apache.catalina.core.StandardContext listenerStop
    严重: Exception sending context destroyed event to listener instance of class org.springframework.web.context.ContextLoaderListener
    java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
    	at org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory(AbstractRefreshableApplicationContext.java:171)
    	at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1090)
    	at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1064)
    	at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1010)
    	at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:559)
    	at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:143)
    	at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:5035)
    	at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5687)
    	at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
    	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    	at java.util.concurrent.FutureTask.run(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)

    将spring从3.1升级到3.2启动tomcat出现如上错误,

     

    仔细检查过web.xml中关于spring配置引入,spring-mvc配置引入都没有问题,

    以及spring配置文件读取方式,包括监听参数配置也是对的,

    关于引入和监听web.xml配置如下:

     

    <context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>
    			classpath:spring/applicationContext-spring-rmi-client.xml,
                classpath:spring/spring-context.xml
            </param-value>
    	</context-param>
    	<listener>
    		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener>
    	<listener>
    		<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    	</listener>

    换回成3.1又没有问题,换成3.2又不行,查看编译环境用的是1.8,将1.8降为1.7,问题解决,服务启动正常,

     

    也就是说spring 3.2不支持1.8编译环境,解决办法就是降为1.7编译环境

    关于编译环境配置如图:

    spring官网说了,要使用java8,只支持spring 4.X以上版本,而spring的使用最低java要求java5及以上,

    如果出现例外,那就例外说了,比如一开始spring 3.1就可以在java8上编译。

     

    展开全文
  • Component和PureComponent的区别

    万次阅读 2019-02-23 17:35:58
    文章目录Component和PureComponent的区别介绍区别点:PureComponent缺点PureComponent优势为什么PureComponent比较复杂的数据结构,可能会因深层的数据不一致而产生错误的否定判断? ReactNative系列-文章 Component...


    ReactNative系列-文章

    Component和PureComponent的区别

    介绍

    React.PureComponent 与 React.Component 几乎完全相同,但 React.PureComponent 通过props和state的浅对比来实现 shouldComponentUpate()。

    在PureComponent中,如果包含比较复杂的数据结构,可能会因深层的数据不一致而产生错误的否定判断,导致界面得不到更新。

    如果定义了 shouldComponentUpdate(),无论组件是否是 PureComponent,它都会执行shouldComponentUpdate结果来判断是否 update。如果组件未实现 shouldComponentUpdate() ,则会判断该组件是否是 PureComponent,如果是的话,会对新旧 props、state 进行 shallowEqual 比较,一旦新旧不一致,会触发 update。

    浅对比:通过遍历对象上的键执行相等性,并在任何键具有参数之间不严格相等的值时返回false。 当所有键的值严格相等时返回true。shallowEqual

    区别点:

    1. PureComponent自带通过props和state的浅对比来实现 shouldComponentUpate(),而Component没有。

    PureComponent缺点

    1. 可能会因深层的数据不一致而产生错误的否定判断,从而shouldComponentUpdate结果返回false,界面得不到更新。

    PureComponent优势

    1. 不需要开发者自己实现shouldComponentUpdate,就可以进行简单的判断来提升性能。

    为什么PureComponent比较复杂的数据结构,可能会因深层的数据不一致而产生错误的否定判断?

    JavaScript 中的对象一般是可变的(Mutable),因为使用了引用赋值,新的对象简单的引用了原始对象,改变新的对象将影响到原始对象。如 foo={a: 1}; bar=foo; bar.a=2 你会发现此时 foo.a 也被改成了 2。

    为了解决这个问题,一般的做法是使用 shallowCopy(浅拷贝)或 deepCopy(深拷贝)来避免被修改,但这样做造成了 CPU 和内存的浪费。

    let foo = {a: {b: 1}};
    let bar = foo;
    bar.a.b = 2;
    console.log(foo.a.b);  // 打印 2
    console.log(foo === bar); // 打印 true
    

    可以在fb的shallowEqual方法源码中看到,如下,浅对比只是用Object.is()对Object的value做了一个基本数据类型的比较。

    
    function is(x: mixed, y: mixed): boolean {
      // SameValue algorithm
      if (x === y) { // Steps 1-5, 7-10
        // Steps 6.b-6.e: +0 != -0
        // Added the nonzero y check to make Flow happy, but it is redundant
        return x !== 0 || y !== 0 || 1 / x === 1 / y;
      } else {
        // Step 6.a: NaN == NaN
        return x !== x && y !== y;
      }
    }
    
    function shallowEqual(objA: mixed, objB: mixed): boolean {
      if (is(objA, objB)) {
        return true;
      }
    
      if (typeof objA !== 'object' || objA === null ||
          typeof objB !== 'object' || objB === null) {
        return false;
      }
    
      const keysA = Object.keys(objA);
      const keysB = Object.keys(objB);
    
      if (keysA.length !== keysB.length) {
        return false;
      }
    
      // Test for A's keys different from B.
      for (let i = 0; i < keysA.length; i++) {
        if (
          !hasOwnProperty.call(objB, keysA[i]) ||
          !is(objA[keysA[i]], objB[keysA[i]])
        ) {
          return false;
        }
      }
    
      return true;
    }
    

    我们先来对is()函数进行分析:

    在js中 ‘===’ 可以判断数据类型是否相等,但其实这样方式也并不十分严谨,例如

    +0 === -0; // js 打印true
    NaN === NaN; // js 打印false
    

    我们希望上述的判断结果,+0和-0为false,NaN与NaN为true,这时候可以用这种方式

    1/+0 // 结果为Infinity
    1/-0 // 结果为-Infinity
    Infinity === -Infinity; // false
    
    解决 NaN === NaNfalse,可以通过NaN和自身不相等的特性来解决
    x !== x && y !== y
    

    所以is()函数首先是通过 ‘===’ 来对数据类型进行比较,然后解决+0/-0和NaN的比较问题。

    接下来分析shallowEqual()函数

    function shallowEqual(objA: mixed, objB: mixed): boolean {
      // 首先对两个基本数据类型进行比较
      if (is(objA, objB)) {
        return true;
      }
    
      // 判断两个数据都为object的情况
      if (typeof objA !== 'object' || objA === null ||
          typeof objB !== 'object' || objB === null) {
        return false;
      }
    
      // 获得所有的key
      const keysA = Object.keys(objA);
      const keysB = Object.keys(objB);
    
      // 判断两者key的数量是否一致
      if (keysA.length !== keysB.length) {
        return false;
      }
    
      // 如果key数量相同,使用一层for循环去比较
      for (let i = 0; i < keysA.length; i++) {
        if (
          // 判断对象B中是否包含对象A的key,即两者的keys是否一致
          !hasOwnProperty.call(objB, keysA[i]) ||
          // 通过is()函数对比A和B的key对应的数据
          !is(objA[keysA[i]], objB[keysA[i]])
        ) {
          return false;
        }
      }
    

    下面以组件的使用来举例:

    例如:

    class ChildComponent extends React.PureComponent {
      render() {
        return(
          <div>
            {this.props.numbers}
          </div>
        )
      }
    }
    class MainComponent extends React.Component {
      constructor(props) {
        super(props);
        this.handleClick = this.handleClick.bind(this);
        this.state = {
          numbers: [0]
        }
      }
      handleClick() {
        const arr = this.state.numbers;
        arr.push(1);
        this.setState({
          numbers: arr
        })
        console.log(this.state.numbers)
      }
      render() {
        <div>
          <button onClick={this.handleClick} />
          <ChildComponent numbers={this.state.numbers}/>
        </div>
      }
    }
    

    然而在MainComponent中去修改numbers时,ChildComponent并没有得到刷新。原因在于js使用的是引用赋值,新的对象简单引用了原始对象,改变新对象虽然影响了原始对象,但对象的地址还是一样,使用===比较的方式相等。而在PureComponent中,会被判定prop相等而不触发render()。

    避免此类问题最简单的方式是,避免使用值可能会突变的属性或状态,而是使用副本来返回新的变量。

    handleClick() {
      this.setState(prevState => ({
        words: [...prevState.words, 'marklar'],
      }));
    };
    
    

    另外一种方式是使用Immutable.js

    展开全文
  • AngularJS Component详解

    万次阅读 2017-02-06 15:11:09
    而在angular1.5的版本之前,都是以directive作为组件化的形式,而directive并不能很好的承担这一个职责,所以google在angular1.5的版本中推出了component组件,用于承担应用之中组件化开发的重担,那么component到底...
  • @component

    千次阅读 2019-11-01 15:36:10
    4、@component (把普通pojo实例化到spring容器中,相当于配置文件中的 ) 泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类 ...
  • - did you register the component correctly? For recursive components, make sure to provide the "name" option. 2. 原因是注册方式写重了: 3. 更正写法后,这个报错消失。...
  • PureComponent PureComponent是组件开发中的重要概念,组件开发人员需要深度理解相关概念。 组件:里面写的是html PureComponent大组件big PureComponent 大组件big PureComponent里面有三个小组件:小组件a、小组件b...
  • React Native之组件Component与PureComponent

    千次阅读 2018-05-18 13:32:47
    众所周知,React Native的页面元素是由...通常在封装组件的时候都会继承Component,不过在React 15.3版本中系统提供了PureComponent,下面就来看一下这两个组件的区别。 首先声明,PureComponentComponent的一个...
  • react中Component和PureComponent比较

    千次阅读 2018-12-31 14:12:55
    import React, { PureComponent } from 'react'; class App extends PureComponent {} import React, { Component } from 'react'; class App extends Component {} PureCompoent是一个更具性能的Component的版本 ...
  • Component属性

    千次阅读 2016-06-29 21:28:54
    Component属性
  • @Component

    千次阅读 2019-07-03 13:22:57
    @Component注解的解析 今天在写程序的时候看见一个以前没有见过的注解(@Component),在网上查找过后,经过实践,决定把它记录下来。 1、@controller 控制器(注入服务) 用于标注控制层,相当于struts中的...
  • 今天怂怂就为大家分享一篇如何解决自定义了一个组件vTable,在nationsjgx-detailInfo.vue中页面中使用vTable组件提示: ... - did you register the component correctly? For recursive components, make sure to p...
  • Spring中@Component的作用

    万次阅读 多人点赞 2017-11-17 10:23:43
    @controller 、@servies、@respository、@Component
  • React中Component与PureComponent的区别

    千次阅读 2019-03-17 13:30:37
    Component是React App的基本构建的单位,也是React中的基本代码复用单位。PureComponentComponent在除了其shouldComponentUpdate方法的实现之外几乎完全相同。PureComponent已经替我们实现了shouldComponentUpdate...
  • React中PureComponentComponent异同

    千次阅读 2019-01-09 21:17:59
    它们几乎完全相同,但是PureComponent通过prop和state的浅比较来实现shouldComponentUpdate,某些情况下可以用PureComponent提升性能 所谓浅比较(shallowEqual),即react源码中的一个函数,然后根据下面的方法进行...
  • Ember component

    千次阅读 2017-02-20 15:10:39
    component顾名思义,是ember中的组件。其特性为可以重复利用。component也是由两部分组成,一个handlebars的模板文件以及一个js文件。其中模板文件控制如何渲染,js文件控制它的行为。组件的定义类似的,定义...
  • component使用

    2019-09-07 18:08:00
    Component内置组件的使用:用于动态切换组件 一:局部注册组件 对于引入的子组件: 定义组件1: <template> <div>这是one组件</div> </template> <script> export default...
  • Spring中@component的使用

    万次阅读 多人点赞 2019-06-09 21:47:32
    Spring中@component的使用 @component是spring中的一个注解,它的作用就是实现bean的注入,@component取代。在探究@component前先了解一下注解?何为注解?注解本质上就是一个类,开发中我们可以使用注解 取代 xml...
  • MX Component 4 安装包

    热门讨论 2013-05-28 13:22:21
    MX Component 4 安装包
  • ComponentOne Studio for WinForms基础课程

    万人学习 2014-11-29 14:01:15
    ComponentOne Studio for WinForms 入门教程视频主要介绍ComponentOne控件产品的基本使用方法,非常适合.NET Winform界面程序。包括界面导航与布局、业务数据交互、数据分析与可视化、报表生成和文档转换等内容。 ...
  • 1、function component: function aa(props) { return <h1>this is {props.name}</h1> } 2、class component: class bb extends React.Component { render() { const { name } = this.props; ...
  • Component排序

    千次阅读 2018-02-24 17:25:26
    方法一当一个interface,有多个实现的时候,这些实现需要按照顺序执行的话,实现方法如下:@Component @Order(Integer.MIN_VALUE) public class ImoocAuthorizeConfigProvider implements AuthorizeConfigProvider {...
  • System.ComponentModel.Component入门

    千次阅读 2016-02-15 12:23:08
    我们经常看见许多.NET的Class是从System.ComponentModel.Component继承过来的,他实现了System.ComponentModel.IComponent接口,而且MS也在Visual Studio .NET中,推荐你经常使用System.ComponentModel.Component...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 252,724
精华内容 101,089
关键字:

component