【问题标题】:Dependency Inject one bean into other using annotation使用注解将一个 bean 注入到另一个中
【发布时间】:2016-08-22 00:41:59
【问题描述】:

我有以下基于 spring 注释的配置:

@Bean
public MarshallingMessageConverter marshallingMessageConverter() {
    return new MarshallingMessageConverter();
}
@Bean
public Jaxb2Marshaller jaxb2Marshaller() {
    return new Jaxb2Marshaller();
}

在 Spring 初始化 marshallingMessageConverter 之前,我需要使用基于 setter 的注入将 jaxb2Marshaller 注入到 marshallingMessageConverter。经过大量谷歌搜索仍然找不到这种情况。请帮忙!!

更新:我无权访问这两个类,因为它们位于 jar 文件中。当我在第三类中自动装配它们时:

@Autorwired MarshallingMessageConverter converter;  //I need something like @Autorwired(setMarshaller = jaxb2Marshaller) where setMarshaller is the setter inside `MarshallingMessageConverter`

@Autowired Jaxb2Marshaller marshaller;

【问题讨论】:

  • Spring有多种方式实现IOC,在消费者中使用注解Autowired是我的最爱,试试(at)Autowired private Jaxb2Marshaller jaxb2Marshaller。

标签: java spring dependency-injection annotations


【解决方案1】:

您可以将marshaller 传递给转换器构造函数吗?如果是这样,您可以使用 autowired 创建编组器,然后在使用 @Bean 注释的方法中传入构造函数:

@Autowired Jaxb2Marshaller marshaller;

@Bean
public MarshallingMessageConverter marshallingMessageConverter() {
    return new MarshallingMessageConverter(marshaller);
}

【讨论】:

  • 它的基于setter的注入。我不能调用“new MarshallingMessageConverter(marshaller)”。此外,如果我仍然有这样的构造函数,那么当我获得编组器 spring 上下文的 Autowired 实例时,它将被初始化,我希望 MarshallingMessageConverter 在此之前拥有该实例。
  • 我没有看到任何注释。可以通过 XML 或使用 @dunni 发布的示例传递编组器。如果 MarshallingMessageConverter bean 可以通过 XML 声明,请设置 <property name="marshaller" ref="yourJaxb2MarshallerBean">.
  • 我只是想通过注释来做 。有什么办法吗?
【解决方案2】:
@Bean
public MarshallingMessageConverter marshallingMessageConverter(Jaxb2Marshaller marshaller) {
    MarshallingMessageConverter converter = new MarshallingMessageConverter();
    converter.whatEverMethodCallIsNeeded(marshaller);
    return converter;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 2011-12-28
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    相关资源
    最近更新 更多