使用 new 关键字创建时在 Spring 存储库中自动装配
Autowiring in Spring repository when created with new keyword
我有如下服务
@Service
public class A {
public B data() {
InterfaceA B = (codition) ? new B1() : new B2();
B.check();
}
}
@Service
public class B1 {
@Autowired
private B1Repo b1repo;//repository
public B1 check() {
b1repo.find();
}
}
当我 运行 服务 A.data()
进程时,我得到 b1repo
为空。由于我使用的是 new
关键字,因此存储库不是自动连接的。
我检查了以下问题
related_issue
但是并没有帮我解决问题
Spring 框架自行创建所有组件实例并填充所有必需的自动连接属性。这称为依赖注入。
当您创建服务的新实例时 class 它是一个没有自动连接的原始实例。
如果您必须通过某些条件获得服务的实施,我建议使用 Spring Profiles
@Service
public class A {
@Autowired
private B1 b1;
@Autowired
private B2 b2;
public B data() {
InterfaceA B = (codition) ? b1 : b2;
B.check();
}
}
@Service
public class B1 {
@Autowired
private B1Repo b1repo;//repository
public B1 check() {
b1repo.find();
}
}
当你在 spring boot 中应用 D 的 SOLID 原则时 - 依赖倒置原则。这可能对你有帮助。
我有如下服务
@Service
public class A {
public B data() {
InterfaceA B = (codition) ? new B1() : new B2();
B.check();
}
}
@Service
public class B1 {
@Autowired
private B1Repo b1repo;//repository
public B1 check() {
b1repo.find();
}
}
当我 运行 服务 A.data()
进程时,我得到 b1repo
为空。由于我使用的是 new
关键字,因此存储库不是自动连接的。
我检查了以下问题
related_issue
但是并没有帮我解决问题
Spring 框架自行创建所有组件实例并填充所有必需的自动连接属性。这称为依赖注入。 当您创建服务的新实例时 class 它是一个没有自动连接的原始实例。
如果您必须通过某些条件获得服务的实施,我建议使用 Spring Profiles
@Service
public class A {
@Autowired
private B1 b1;
@Autowired
private B2 b2;
public B data() {
InterfaceA B = (codition) ? b1 : b2;
B.check();
}
}
@Service
public class B1 {
@Autowired
private B1Repo b1repo;//repository
public B1 check() {
b1repo.find();
}
}
当你在 spring boot 中应用 D 的 SOLID 原则时 - 依赖倒置原则。这可能对你有帮助。