2

我有一堂课MyClass

public class MyClass
{
  @Autowired
  private MyClassA myClassA;
}

@Component
public class MyClassA
{
  @Autowired
  private MyClassB myClassB;

  @Transactional
  public void myTransaction()
  {
  }

}

@Component
public class MyClassB
{
}

MyClassA 和MyClassB都在不同的项目(jar)中。我面临的问题是每当我使用@Autowire@Resource创建 myClassA bean 时,myClassA bean 的 myClassB 为空。为什么 myClassB bean 为空?

这是否意味着我的弹簧配置有问题?

4

1 回答 1

1

确保您在具有代理包装器的 bean 上调用的方法是公共的。如果它们具有默认或受保护的访问权限,那么对它们的调用将不会被代理,并且会在 Spring 自动装配和代理之前输入“bean”的实例。

如果您不知道 Spring 代理是如何工作的,这可能是一个很难找到的错误,因为没有警告可以帮助您找到原因。

于 2021-09-03T09:24:27.767 回答