来自依赖Spring项目的Java配置bean没有被初始化

时间:2014-09-22 12:30:35

标签: java spring maven

我有3个Spring项目:'web',worker'和'core'。

'core'包含来自'web'和'worker'的常用功能,例如域bean或jpa存储库,它包含在'worker'和'web'项目中作为jar。

'web'项目中的POM

<dependency>
    <groupId>com.proyecti.magmainside221b</groupId>
    <artifactId>core</artifactId>
    <version>1.0.0.RC1</version>            
</dependency>

当我在Tomcat中部署'web'项目时,看起来'core'中的Java配置bean没有被初始化,因为' 数据源 'bean(在'core'中定义) “@Bean在@Configuration注释的一个类中的项目”未被发现注入 'PersistentTokenBasedRememberMeServices'

Caused by: 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices#0': Cannot create inner bean '(inner bean)#1978517' of type [org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl] while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#1978517': Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'dataSource' is defined

在部署“web”项目时,我需要做些什么来从'core'项目初始化我的java配置bean?

谢谢!

编辑:

我在日志中发现正在加载我的applicationContext文件。

2014-09-22 15:04:37,922 INFO [unknown] [localhost-startStop-1] o.s.b.f.x.XmlBeanDefinitionReader - Loading XML bean definitions from file [/home/aacevedo/workspaces/magma/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/web/WEB-INF/classes/META-INF/spring/applicationContext.xml]
2014-09-22 15:04:37,940 INFO [unknown] [localhost-startStop-1] o.s.b.f.x.XmlBeanDefinitionReader - Loading XML bean definitions from URL [jar:file:/home/aacevedo/workspaces/magma/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/web/WEB-INF/lib/core-1.0.0.RC1.jar!/META-INF/spring/applicationContext-core.xml]

我的'核心'项目我(认为)不需要applicationContext,因为我使用的是Java配置,我的主要配置类看起来像这样:

@Configuration
@EnableSpringConfigured
@EnableTransactionManagement
@EnableJpaRepositories("com.proyecti.magma.common.datasources.internal.repositories")
@ComponentScan( basePackages = {"com.proyecti.magma"}, 
            excludeFilters=
            {
                @ComponentScan.Filter(type=FilterType.ANNOTATION, value=Controller.class)
            })
@Order(1)
public class BasicDataSourceConfig 
{
...
}

我在BasicDataSourceConfig构造函数中放了一个断点但是没有到达它。

当我统一这个项目时,一切正常。

更新2:

这就是我的项目结构:

enter image description here

2 个答案:

答案 0 :(得分:2)

您需要使用@Import注释将“核心”上下文导入“网络”上下文。

答案 1 :(得分:0)

最后,我找到了一个适合我的配置。

在使用注释的配置方式中包含 @ComponentScan 时,似乎没有检测到...我已创建了一个常规的applicationContext.xml文件我的网络&#39; project使用XML添加组件扫描对象,现在两个项目中的@Configuration类都被成功检测到了。