gpt4 book ai didi

Java Spring Boot 配置标准

转载 作者:行者123 更新时间:2023-11-30 06:26:45 24 4
gpt4 key购买 nike

我有一个像这样的界面层次结构:

public interface Shape {
//code
}

@Component
public class Circle implements Shape {
//code
}

@Component
public class Square implements Shape {
//code
}

我想知道使用 Spring Boot bean 约定连接这些的最佳方法。

解决方案 1:

@Component(value = "Circle")
public class Circle implements Shape {
//code
}

@Component(value = "Square")
public class Square implements Shape {
//code
}

@Configuration
public class ShapeConfig {
@Bean
Foo circleFoo(@Qualifiers("Circle") Shape shape) {
return new Foo(shape);
}

@Bean
Foo squareFoo(@Qualifiers("Square") Shape shape) {
return new Foo(shape);
}
}

解决方案 2:

@Component
public class Circle implements Shape {
//code
}

@Component
public class Square implements Shape {
//code
}

@Configuration
public class ShapeConfig {
@Bean
Foo circleFoo(Circle shape) {
return new Foo(shape);
}

@Bean
Foo squareFoo(Square shape) {
return new Foo(shape);
}
}

在这种情况下,最好的 java/spring 实践是什么?我发现值和 @Qualifier 的东西有点冗长,但我想知 Prop 体实现中的接线是否不受欢迎

最佳答案

这取决于您的应用程序的实现

在 Autowiring 的情况下,spring 首先尝试通过名称 Autowiring ,如果没有找到,则按类型进行 Autowiring ,然后通过构造函数进行 Autowiring (如果按类型未找到任何 bean)。

除非我们没有多个具有相同类型和不同名称的 bean,否则我们可以使用解决方案 2(我们也可以使用 autowire byName 而不是通过构造函数),但如果我们有 2 个或更多则 2 个 bean具有相同的类型,然后我们选择解决方案 1(限定符) 例如:

 @Configuration
public class Config {
@Bean(name = "circle1")
public Circle getCircle1(){
Circle c = new Circle();
c.setRadius(1.5);
return c;
}

@Bean(name = "circle2")
public Circle getCircle2(){
Circle c = new Circle();
c.setRadius(10);
return c;
}
}

假设我有一项服务

@Component
CirculeService {
@Autowire @Qualifier("circle1") Circle circle1
@Autowire @Qualifier("circle2") Circle circle2
}

在上面的例子中,我在限定符的帮助下进行了 Autowiring (与构造函数的 Autowiring 相同)

关于Java Spring Boot 配置标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47045943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com