我有两个班,比方说a和b。a在模块1中,b在模块2中。模块1在模块2中编译。在类a中有一个自动连接的bean,required=false。
@Service
public class A implements X{
@Autowired(required=false)
private C objectC;
public String method(){
//does some processing with methods by objectC.
}
}
a类在模块2中的b类中自动连接。
@Service
public class B implements Y{
@Autowired
private A objectA;
public String method(){
return objectA.method();
}
}
现在的问题是,当从类b调用类a的method()时,不会注入autowired(required=false)对象。当从同一模块中的另一个类调用同一方法时,会正确地注入同一对象,但从另一个模块调用时,不会注入该对象。
2条答案
按热度按时间k0pti3hp1#
问题是在扫描包时。
@Autowired(required=false)
通知容器在找到bean时注入bean,或者在没有bean的情况下继续(可选的自动连接)。因此,在模块2中,您必须检查模块1的包是否被正确扫描。这个
@Autowired
没有问题。例如:
以下是允许的依赖项组合
ClassA
:依赖性1
依赖1,依赖2
依赖1,依赖3
依赖1,依赖2,依赖3
iszxjhcz2#
你确定在你的代码里没有写这样的东西吗
? 因为如果这样做,autowired对象将为空。请使用objectprovider进行测试,如下所示: