Spring Java配置指定Beans不会初始化

时间:2017-10-20 07:25:24

标签: java xml spring configuration config

我已经阅读过Spring In Action,并且更喜欢Java配置而不是XML配置。所以我使用Java配置来编写我的应用程序,但是我们的部署环境要求我使用XML配置。所以我编写了一个XML配置,它的唯一功能是导入根Java配置。

Java配置代码如下所示:

package com.somegroup.app;
@Configuration
@ComponentScan(basePackages = "com.tianchengsys.crawlers.cqs")
public class AppCtxConfig {

    @Bean
    public SomeType aSomeType() {
           return new SomeType()
    }

}

,XML配置如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <context:annotation-config />

    <bean class="com.somegroup.app.AppCtxConfig" lazy-init="false" />

</beans>

当我在Eclipse中创建ClasspathXmlContext("classpath:spring-context.xml")时,Java config中定义的SomeType bean被初始化,并注册到springContext。但是当我部署这个应用程序(所有依赖项都在lib目录中)时,XML配置中定义的AppCtxConfig bean只是处理普通bean(而不是配置)。

它已创建,但其中定义的bean未初始化。 Spring有时会警告Java配置中的someType方法应该是静态的。我确实将它改为静态,它也没有用。

1 个答案:

答案 0 :(得分:0)

这是因为你正在创建AppCtxConfig作为常规bean,它不是。

正如评论员建议的那样,添加组件扫描并将base-package设置为配置类所在的包:

<!-- Scan the JavaConfig -->
<context:component-scan base-package="com.somegroup.app" />

如果您的应用包是根包,并且包含所有子包,请添加一个新配置包并在其中移动AppCtxConfig

添加:

<!-- Scan the config package with AppCtxConfig inside it -->
<context:component-scan base-package="com.somegroup.app.config" />