繁体   English   中英

Spring 3.1:如何注入在不同配置类中创建的bean

Spring 3.1: How do I inject a bean created in a different configuration class

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我只是使用Spring 3.1设置一个Web应用程序,我试图通过使用java配置来实现这一点。 我有两个配置类“AppConfig”(通用bean定义)和“WebConfig”(Spring MVC配置)。 如何引用已在WebConfig类中的AppConfig中声明的bean?

下面,AppConfig配置类中的验证器应该使用来自WebConfig的messageSource。

AppConfig的:

@Configuration
@ComponentScan(basePackages = { "com.example" })
public class AppConfig {

    @Bean
    public Validator validator() {
        final LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
        validator.setValidationMessageSource(messageSource());
        return validator;
    }

}

WebConfig:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.example.common.web", "com.example.web"  })
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    public ReloadableResourceBundleMessageSource messageSource() {
        final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:messages");
        return messageSource;
    }

}

当我想从同一个配置类引用一个bean时,我只是调用它的setup方法,但是当bean在另一个类中声明时,我显然不能这样做。

非常感谢您的建议!

3 个回复

配置也是bean,因此您可以使用@Autowired

public class WebConfig extends WebMvcConfigurerAdapter {

    @Autowired
    private Validator validator;

    ...
}

有两种方法可以做到:

public class WebConfig {
    @Autowired
    AppConfig appconfig;

    ...
}

或者,正如Aaron Digulla所说:

public class WebConfig {
    @Autowired
    Validator validator;

    ...
}

我更喜欢第一种形式,一种是自动装配,你可以访问整个配置,然后你可以通过调用theNewBean.setValidator(appConfig.validator());来访问它的bean theNewBean.setValidator(appConfig.validator());

我认为Aaron Digulla和Amir Pashazadeh都是正确的,但自从JSR 330推出以来,还有另一个注释。 您也可以使用@Inject

@Inject
private Validator validator;

http://docs.spring.io/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation

1 Spring配置类将bean作为属性注入

我有一个spring配置类,用于从属性文件读取并创建bean。 在xml文件中 我能够设置username和password属性,但无法将configParam属性设置为employee因为我们需要注入ConfigParam及其bean 。 请让我知道如何在employee方法 ...

2 Spring可配置bean注入

除了工厂模式之外,有没有办法注入bean依赖项可配置? 我有3个类实现相同的接口并有3个bean定义。 我想在其他类中更改那些bean吗? 对于例子,是否可以读取bean名称表单conf文件并将其用作变量? ...

3 Spring 3.1 Java配置和内部bean

在旧的XML时代,我将真实存储库配置为匿名内部bean。 是否可以使用新的Java配置方法执行类似的操作? 在timedRepository工厂方法中实例化实际存储库不是一个选项,因为我希望Spring能够在RealRepository上获取注释。 其动机是避免任何其他bean获取真 ...

4 如何在spring配置类中创建RestControllerAdvice类型的spring @bean

我正在尝试编写 RestControllerAdvice,它是一个通用库的一部分,我希望在某个属性的当前可用。 根据我们的公共库,我们通过配置而不是注释来定义所有 bean,以便我们可以按需导入该配置类,而不是总是创建这些 bean。 但是我发现很难提到 bean 实际上是 Spring 配置类中的 ...

8 Spring 3.1配置:环境未注入

我在弹簧3.1配置中使用以下内容: 问题是变量env没有被注入并且始终为null。 我没有做任何关于环境设置的事情,因为我不知道它是否需要或如何。 我看了温室的例子,我没有找到任何专门针对环境的东西。 我该怎么做以确保注入env ? 相关文件: 在applicat ...

9 将bean注入Spring托管上下文之外的类中

我是我公司产品的最终用户。 它不太适合集成到Spring中,但是我能够处理上下文并按名称检索所需的bean。 但是,我仍然想知道是否有可能将bean注入到这个类中,即使该类不是由Spring本身管理的。 澄清:管理某些类MyClass生命周期的同一个应用程序也在管理Spring上下文的 ...

10 Spring中的Bean配置

我按照下面的方式在春季配置了两个bean。 我给伪代码如下 在这种情况下会发生什么。 我认为配置工作正常。 如果我错了请纠正我。 我想知道我是否可以以这种方式配置bean。 如果不合适,则抛出什么异常 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM