【问题标题】:Spring @Value does not inject property of one bean into another bean's propertySpring @Value 不会将一个 bean 的属性注入另一个 bean 的属性
【发布时间】:2013-08-15 19:43:50
【问题描述】:

我有一个带有属性 pA 的 bean A。现在,我想将此属性注入到另一个 bean B 的属性 pB 中。尝试使用 @Value,同时使用 $ 和 #,但它不起作用。这是我的B班。

@Component
public class B
{

    @Value("${a.aP}")
    private boolean bP;

}

A 类如下所示:

@Component
public class A
{
    private boolean aP;

if(some condition){

aP = true;

}

}

【问题讨论】:

  • 这些是如何实例化/获取的。它们都是由 Spring 管理的,还是你在任何地方都使用 new() 关键字来创建一个。
  • 两者都是spring管理的bean。

标签: spring


【解决方案1】:

你可以将 bean A 注入到 B 中,然后使用 @PostConstruct 设置 bP:

@Component
public class B {

   private boolean bP;

   @Autowired
   private A a;

   @PostConstruct
   public void postConstructMenthod() {
      bP = a.getAP();
   }
}

【讨论】:

  • 感谢您的回复,但现在的问题是我无法将 A 自动连接到 B,它给出了“没有 A 类型的匹配 bean...”。 A 是一个扩展 GenericFilterBean 的过滤器类。
  • 你有这样的异常很奇怪... A 被@Component 注释所以它必须能够注入这个bean。还有一件事:bean A 的初始化必须早于 bean b。你可以使用@DependsOn("A") 来做这件事,但是使用这样的结构并不优雅
  • 尝试@Value("#{A.aP}") 大写 a 或者 - 也许 - 检查您的 是否拼写错误
  • 谢谢,我已经尝试过@Value("#{A.aP}"),但在启动时出现异常“未为代理类型定义字段或属性 aP... '类似的东西。然后我没有自动装配A的这个问题。只有当我为B提供@PostConstruct时,我才开始遇到自动装配的问题。正如我已经提到的,A 正在扩展 org.springframework.web.filter.GenericFilterBean,它不是一个组件。因此,我也尝试为 GenericFilterBean 定义一个 bean,但仍然出现自动装配异常......奇怪!!!
猜你喜欢
  • 2017-06-18
  • 1970-01-01
  • 2017-12-12
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 2010-12-08
  • 1970-01-01
相关资源
最近更新 更多