当前位置: 首页 > 知识库问答 >
问题:

使用bean定义配置文件的Spring3.1 bean可见性

谷梁俊楚
2023-03-14

我一直在尝试使用Spring3.1的bean定义概要文件和嵌套bean。我希望可以根据活动配置文件定义不同的bean。请考虑以下非常简化的示例,使我的Spring上下文包含如下内容

<bean id="say" class="test.Say" p:hello-ref="hello"/>

<beans profile="prod">
    <bean id="hello" class="test.Hello" p:subject="Production!"/>
</beans>

<beans profile="dev">
    <bean id="hello" class="test.Hello" p:subject="Development!"/>
</beans>

我得到以下错误:

线程“main”org.springframework.beans.factory.BeanCreationException中出现异常:创建类路径资源[applicationcontext.xml]中定义的名为“say”的bean时出错:设置bean属性“hello”时无法解析对bean“hello”的引用;嵌套异常为Org.SpringFramework.Beans.Factory.NosuchBeanDefinitionException:在Org.SpringFramework.Beans.Factory.Support.BeanDefinitionValueResolver.ResolveReference(BeanDefinitionValueResolver.java:328)在Org.SpringFramework.Beans.Factory.Support.BeanDefinitionValueResolveReference(BeanDefinitionValueResolveReference:328)在Org.SpringFramework.Beans.Factory.Support.BeanDefinitionValueResolveReference(结果:1

我期望hello bean将根据活动的Maven概要文件(在我的例子中是prod或dev)来定义。我开始认为Spring活动概要文件(Spring.profiles.active)可能与Maven概要文件完全无关。

谁能解释一下我哪里错了吗?(这甚至可以使用配置文件吗?)。

共有1个答案

白烨煜
2023-03-14

我期望hello bean将根据活动的Maven概要文件(在我的例子中是prod或dev)来定义。我开始认为Spring活动概要文件(Spring.profiles.active)可能与Maven概要文件完全无关。

那是真的,他们是不相干的。

以下是修复方法:

<context-param>
    <param-name>spring.profile.active</param-name>
    <param-value>${profileName}</param-value>
</context-param>
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.3</version>
    <configuration>
        <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
    </configuration>
</plugin>
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <profileName>dev</profileName>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <profileName>prod</profileName>
        </properties>
    </profile>
</profiles>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <profileName>dev</profileName>
</properties>
 类似资料:
  • 我有三个活动,每个都有一个按钮。Act1与btn1,Act2与btn2,Act3与btn3。我有另一个活动作为主活动,有三个图像视图:ImageView1、imageView2和imageView3,所有这些最初都是不可见的。我希望这样,当我在act1中单击btn1时,MainActivity中的imageView1将可见,而当再次单击btn1,ImageView 1将再次不可见。与imageVi

  • 我对APplicationContext中定义的bean有问题。(可能是我的问题是理解应用程序~Servlet上下文?) 所以,我定义 应用程序上下文。xml 我还有MVCServlet。xml在web中定义。xml格式: 在我的@controller中,我使用bean messageSource的方式如下: 当我在MVCServlet中定义bean时。xml-只要我将其移动到(正如我理解serv

  • 我用的是Spring靴。我有一些关于春靴豆的问题。 但我怀疑 我使用bean,它们是默认作用域,它是单例的。因此每个应用程序只有一个实例。 现在我使用bean,它的作用域是prototype。因此它们将拥有每个请求的每个实例。 但是 我希望每个用户都有一个实例..?所有请求都使用每个用户的单个实例。

  • 本文向大家介绍golang 使用 viper 读取自定义配置文件,包括了golang 使用 viper 读取自定义配置文件的使用技巧和注意事项,需要的朋友参考一下 viper 支持 Yaml、Json、 TOML、HCL 等格式,读取非常的方便。 viper 官网有案例:https://github.com/spf13/viper 创建 config.yaml 文件 建一个 config.go 用

  • 我试图配置SUTime注释器(“ner”的一部分),以使用我自己的日期/时间规则文件,而不是Stanford CoreNLP模型的分发JAR中位于“models/SUTime/”中的开箱即用的规则文件。 我这样做的原因是,我想稍微修改SUTime规则正在执行的操作。 根据官方的SUTime文档,所需要的只是以逗号分隔的文件路径的形式指定“SUTime.rules”属性。 但是在我这样做之后,Cor

  • 现在邮件模板对于所有环境都是一样的,所以我没有把它放在一个用特定配置文件标记的配置中。 我尝试通过初始化类来初始化概要文件: 并将其作为上下文参数: 谢谢你的帮助。