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

如何通过@bean标记的方法创建bean,并使用yaml文件中的属性?

姜华翰
2023-03-14
spring:
  redis:
    host: localhost
    port: 6379
@Configuration
public class DummyConfig {
    private Logger logger = LoggerFactory.getLogger(DummyConfig.class);

    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;

    @PostConstruct
    public void init() {
    logger.info("redis host: {}", host);
    }

    @Bean
    public String mappingMongoConverter() {
    logger.info("redis host: {}", host);
    return "HelloBean";
    }
}

问题是:

  • 为什么会这样?
  • 在由@bean注释的方法中,如何使用来自YAML的属性?

经过讨论和测试,问题变成了关于@bean标记的方法名称,而不是关于来自yaml或其他配置文件的属性。

共有1个答案

谷梁俊楚
2023-03-14

我在spring-boot应用程序的入口类application.java中添加了以下方法:

/**
 * Create a command line runner, that print bean names.
 * 
 * @param ctx
 * @return
 */
@Bean
public CommandLineRunner initRunner(ApplicationContext ctx) {
    return args -> {
        printBeanNames((ConfigurableApplicationContext) ctx);
    };
}

/**
 * Print bean names.
 * 
 * @param ctx
 */
private void printBeanNames(ConfigurableApplicationContext ctx) {
    String[] beanNames = ctx.getBeanDefinitionNames();
    Arrays.sort(beanNames); // sort,

    logger.info("bean count: {}", beanNames.length);
    for (int i = 0; i < beanNames.length; i++) {
        System.out.printf("\t[%4d]: %s\n", i, beanNames[i]);
    }
}

它将按字母顺序打印应用程序上下文中所有bean的名称。

并且在应用程序中没有添加关于MongoDB的依赖项。

    null
    null
 类似资料:
  • 我有一个关于spring beans初始化的问题。当我们通过init方法填充bean属性时,scneario是什么。看看下面给出的代码片段。这里我通过init方法填充超类bean属性列表。 1) 超级类Bean: 2)豆子2: 3) Spring上下文xml: 4) 输出:名为Super list2子列表的Super init::0 我的问题是当超级类被容器初始化时,调用init()。在这个方法中

  • 我必须根据tenantIdentifier创建一个数据源bean以实现多租户。我正在考虑开箱即用的解决方案,添加新租户就像在context.xml中添加配置和在应用程序属性文件中添加租户属性一样简单,公开一个API来刷新我的context.xml以便从spring cloud config和属性文件中加载。 目前,我被这个错误所困扰: 我的DataSourceFactoryBean如下所示: 我有

  • 我是spring的新手,我正在尝试修改我的应用程序来实现spring框架。我的请求是为每一个新请求创建一个新bean,然后在后面的代码中引用该bean,以便从单个bean中为其设置值。我正在尝试将bean声明为prototype,并使用查找方法在我的单例bean中引用该bean。但我的问题是,当稍后尝试获取创建的原型bean以设置值时,我看到它在获取bean时再次创建新的bean。 下面是我的原型

  • 如何基于应用程序动态定义bean。yml文件? 例如,YAML文件如下所示: 这将动态创建两个带有内容类型标题集的HTTPHeader。 下面是我现在如何定义bean: 如果我需要添加更多endpoint,我需要复制并粘贴这些bean,这是我想要避免的。 注意:这些动态bean不需要任何其他bean。我不确定这是否有什么不同。它只需要加载配置。

  • 我需要将旧式spring项目迁移到springboot。假设下面的代码片段我必须迁移到Spring Boot风格。 在这里我的问题,如何将下面的抽象bean转换为@Bean?

  • 在使用HTTP远程处理的Spring应用程序中,我有一个服务façade模块,配置如下(我将代码设置为通用代码以提高清晰度): 其中,FirstService和SecondService是与现有实现的接口,此处不需要这些实现的详细信息。 我有另一个模块,它定义了39个代理(HTTPInvokerProxy工厂bean的实例),对应于通过façade公开的每个服务。 到目前为止,一切正常。 但我希望