spring多包自动扫描注入问题

J2EE 码拜 10年前 (2015-04-03) 1564次浏览 0个评论

项目中所有的spring输入都是通过注解注入,在spring配置中配置自动扫描路径,现在遇到如下问题:
我的项目包结构为:com.aaa.bbb…….引入了别人提供的jar包,里面的注入也是注解方式注入,但是他们的包结构如:com.ccc.ddd……

此时我的spring扫描应该如何配置才可以两个包路径下的都可以扫描?
我按如下方式配置,一直不可以:

	<context:component-scan base-package="com"
		use-default-filters="false">
		<context:include-filter type="regex"
			expression=".*aaa.*" />
		<context:include-filter type="regex"
			expression=".*ccc.*" />
	</context:component-scan>

表达式里面改成com.aaa.*和com.bbb.*结果也是不行,报错如下:

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [jar:file:/E:/tomcat/apache-tomcat-7.0.53-default/wtpwebapps/serverPay/WEB-INF/lib/icu4j-2.6.1.jar!/com/ibm/icu/impl/data/LocaleElements_zh__PINYIN.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 48188
	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:195)
	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:4973)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
	at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
spring多包自动扫描注入问题
10分
<context:component-scan base-package="com.*"/>

试试这样行么?

spring多包自动扫描注入问题
引用 1 楼 lodamemory 的回复:
<context:component-scan base-package="com.*"/>

试试这样行么?

这样也试过,也是不行,错误也是上面我贴出来的错。

spring多包自动扫描注入问题
引用 2 楼 fengspg 的回复:
Quote: 引用 1 楼 lodamemory 的回复:
<context:component-scan base-package="com.*"/>

试试这样行么?

这样也试过,也是不行,错误也是上面我贴出来的错。

有可能是他引入注解的jar和你引入的jar冲突了。

spring多包自动扫描注入问题
引用 3 楼 lodamemory 的回复:
Quote: 引用 2 楼 fengspg 的回复:
Quote: 引用 1 楼 lodamemory 的回复:
<context:component-scan base-package="com.*"/>

试试这样行么?

这样也试过,也是不行,错误也是上面我贴出来的错。

有可能是他引入注解的jar和你引入的jar冲突了。

不是jar包冲突问题,我自己单独起了个项目,新建了两个不同的包结构,用spring注解注入,也是不行

spring多包自动扫描注入问题
引用 4 楼 fengspg 的回复:
Quote: 引用 3 楼 lodamemory 的回复:
Quote: 引用 2 楼 fengspg 的回复:
Quote: 引用 1 楼 lodamemory 的回复:
<context:component-scan base-package="com.*"/>

试试这样行么?

这样也试过,也是不行,错误也是上面我贴出来的错。

有可能是他引入注解的jar和你引入的jar冲突了。

不是jar包冲突问题,我自己单独起了个项目,新建了两个不同的包结构,用spring注解注入,也是不行

新建一个也不行?怪事啊

spring多包自动扫描注入问题
10分
这样的高级用法,还没有用过呢
spring多包自动扫描注入问题
引用 5 楼 lodamemory 的回复:
Quote: 引用 4 楼 fengspg 的回复:
Quote: 引用 3 楼 lodamemory 的回复:
Quote: 引用 2 楼 fengspg 的回复:
Quote: 引用 1 楼 lodamemory 的回复:
<context:component-scan base-package="com.*"/>

试试这样行么?

这样也试过,也是不行,错误也是上面我贴出来的错。

有可能是他引入注解的jar和你引入的jar冲突了。

不是jar包冲突问题,我自己单独起了个项目,新建了两个不同的包结构,用spring注解注入,也是不行

新建一个也不行?怪事啊

是不行的,你可以自己新建个项目试试,给两个或多个不同结构的包进行注入。
如com.aaa.bbb和com.ccc.ddd.xxx这种包结构,给aaa和ccc下面的对象注入

spring多包自动扫描注入问题
10分
<context:component-scan base-package="com"  use-default-filters="false">
    <context:include-filter type="regex" expression="com.aaa.bbb.*" />
    <context:include-filter type="regex" expression="com.ccc.ddd.*" />
</context:component-scan>

这样呢

spring多包自动扫描注入问题
20分
引用 7 楼 fengspg 的回复:
Quote: 引用 5 楼 lodamemory 的回复:
Quote: 引用 4 楼 fengspg 的回复:
Quote: 引用 3 楼 lodamemory 的回复:
Quote: 引用 2 楼 fengspg 的回复:
Quote: 引用 1 楼 lodamemory 的回复:
<context:component-scan base-package="com.*"/>

试试这样行么?

这样也试过,也是不行,错误也是上面我贴出来的错。

有可能是他引入注解的jar和你引入的jar冲突了。

不是jar包冲突问题,我自己单独起了个项目,新建了两个不同的包结构,用spring注解注入,也是不行

新建一个也不行?怪事啊

是不行的,你可以自己新建个项目试试,给两个或多个不同结构的包进行注入。
如com.aaa.bbb和com.ccc.ddd.xxx这种包结构,给aaa和ccc下面的对象注入

我试了一下写成

<context:component-scan base-package="com.aaa.bbb.*"/>
 <context:component-scan base-package="com.ccc.ddd.*"/>

<context:component-scan base-package="com.*"/>

都是可以的啊


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明spring多包自动扫描注入问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!