来自依赖 Spring 项目的 Java 配置 bean 未初始化

标签 java spring maven

我有 3 个 Spring 项目:“web”、“worker”和“core”。

“core”包含“web”和“worker”的常见功能,例如域 bean 或 jpa 存储库,并且它作为 jar 包含在“worker”和“web”项目中。

“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 注释的项目)未发现注入(inject)到 '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

最佳答案

您需要使用 @Import 注释将“core”上下文导入到“web”上下文中。

关于来自依赖 Spring 项目的 Java 配置 bean 未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25974194/

相关文章:

java - Spring ThreadPoolTask​​Executor 配置?

maven - 为什么 Apache Commons 库的 groupId 不一致,具体取决于项目?

maven - 在管道中传递MAVEN_OPTS

java - 从 ftp 获取最新文件

java - getter 的良好命名约定

java - 从 `Duration` 和 `Period` 获取 `LocalDate`

java - Spring 数据: how to use repository's inner interfaces outside the outer class?

java - 在 Intent.ACTION_OPEN_DOCUMENT_TREE 返回的目录中创建新文件

java - 使用 AspectJ 了解调用者类

java - maven插件执行顺序