spring多包自动扫描注入问题

Intboy 2014-06-24 10:15:24
项目中所有的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)
...全文
29168 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
董猿外 2015-11-29
  • 打赏
  • 举报
回复
多包扫描这样配置: "com.aaa.package1,com.aaa.package2" 用逗号分隔
董猿外 2015-11-29
  • 打赏
  • 举报
回复
多包扫描这样配置: "com.aaa.package1,com.aaa.package2" 用逗号分隔
「已注销」 2015-07-28
  • 打赏
  • 举报
回复
楼主解决了吗?求方法
魂不守舍 2015-01-23
  • 打赏
  • 举报
回复
楼主最后怎么解决的??
lengfengzhizhe1 2015-01-08
  • 打赏
  • 举报
回复
楼主,我也遇到了同样的问题,敢问楼主最后是如何解决的?
lodamemory 2014-06-25
  • 打赏
  • 举报
回复
引用 7 楼 fengspg 的回复:
[quote=引用 5 楼 lodamemory 的回复:] [quote=引用 4 楼 fengspg 的回复:] [quote=引用 3 楼 lodamemory 的回复:] [quote=引用 2 楼 fengspg 的回复:] [quote=引用 1 楼 lodamemory 的回复:]

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

试试这样行么?
这样也试过,也是不行,错误也是上面我贴出来的错。[/quote] 有可能是他引入注解的jar和你引入的jar冲突了。[/quote] 不是jar包冲突问题,我自己单独起了个项目,新建了两个不同的包结构,用spring注解注入,也是不行[/quote] 新建一个也不行?怪事啊[/quote] 是不行的,你可以自己新建个项目试试,给两个或多个不同结构的包进行注入。 如com.aaa.bbb和com.ccc.ddd.xxx这种包结构,给aaa和ccc下面的对象注入[/quote] 我试了一下写成

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

<context:component-scan base-package="com.*"/>
都是可以的啊
whos2002110 2014-06-25
  • 打赏
  • 举报
回复

<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>
这样呢
Intboy 2014-06-25
  • 打赏
  • 举报
回复
引用 5 楼 lodamemory 的回复:
[quote=引用 4 楼 fengspg 的回复:] [quote=引用 3 楼 lodamemory 的回复:] [quote=引用 2 楼 fengspg 的回复:] [quote=引用 1 楼 lodamemory 的回复:]

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

试试这样行么?
这样也试过,也是不行,错误也是上面我贴出来的错。[/quote] 有可能是他引入注解的jar和你引入的jar冲突了。[/quote] 不是jar包冲突问题,我自己单独起了个项目,新建了两个不同的包结构,用spring注解注入,也是不行[/quote] 新建一个也不行?怪事啊[/quote] 是不行的,你可以自己新建个项目试试,给两个或多个不同结构的包进行注入。 如com.aaa.bbb和com.ccc.ddd.xxx这种包结构,给aaa和ccc下面的对象注入
lodamemory 2014-06-24
  • 打赏
  • 举报
回复
引用 2 楼 fengspg 的回复:
[quote=引用 1 楼 lodamemory 的回复:]

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

试试这样行么?
这样也试过,也是不行,错误也是上面我贴出来的错。[/quote] 有可能是他引入注解的jar和你引入的jar冲突了。
Intboy 2014-06-24
  • 打赏
  • 举报
回复
引用 1 楼 lodamemory 的回复:

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

试试这样行么?
这样也试过,也是不行,错误也是上面我贴出来的错。
lodamemory 2014-06-24
  • 打赏
  • 举报
回复

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

试试这样行么?
业余草 2014-06-24
  • 打赏
  • 举报
回复
这样的高级用法,还没有用过呢
lodamemory 2014-06-24
  • 打赏
  • 举报
回复
引用 4 楼 fengspg 的回复:
[quote=引用 3 楼 lodamemory 的回复:] [quote=引用 2 楼 fengspg 的回复:] [quote=引用 1 楼 lodamemory 的回复:]

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

试试这样行么?
这样也试过,也是不行,错误也是上面我贴出来的错。[/quote] 有可能是他引入注解的jar和你引入的jar冲突了。[/quote] 不是jar包冲突问题,我自己单独起了个项目,新建了两个不同的包结构,用spring注解注入,也是不行[/quote] 新建一个也不行?怪事啊
Intboy 2014-06-24
  • 打赏
  • 举报
回复
引用 3 楼 lodamemory 的回复:
[quote=引用 2 楼 fengspg 的回复:] [quote=引用 1 楼 lodamemory 的回复:]

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

试试这样行么?
这样也试过,也是不行,错误也是上面我贴出来的错。[/quote] 有可能是他引入注解的jar和你引入的jar冲突了。[/quote] 不是jar包冲突问题,我自己单独起了个项目,新建了两个不同的包结构,用spring注解注入,也是不行

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧