Как впрыскивание зависимости по имени работает в пружине @bean Метод параметровJAVA

Программисты JAVA общаются здесь
Anonymous
Как впрыскивание зависимости по имени работает в пружине @bean Метод параметров

Сообщение Anonymous »

Я понимаю Spring di и как он работает в целом. Параметры Fernas2 протираются во время выполнения. Тем не менее, пружина все еще может внедрить правильный экземпляр Abbas < /code> Bean.

Код: Выделить всё

@SpringBootApplication
public class DemoApplication {

@Autowired
private Abbas abbas1;    // this is understandable, hence the field name is available at runtime

@Autowired
private Abbas abbas2;   // this is understandable, hence the field name is available at runtime

public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class, args);

Map beansOfType = ctx.getBeansOfType(Fernas.class);
System.out.println(beansOfType);

Arrays.stream(DemoApplication.class.getMethods())
.filter(m -> m.getName().startsWith("fernas"))
.flatMap(m -> Stream.of(m.getParameters()))
.map(Parameter::getName)
.forEach(System.out::println);

System.out.println(ctx.getBean(DemoApplication.class).abbas1);
System.out.println(ctx.getBean(DemoApplication.class).abbas2);
}

class Abbas {
String name;

@Override
public String toString() {
return name;
}
}

class Fernas {
Abbas abbas;

@Override
public String toString() {
return abbas.toString();
}
}

@Bean
public Abbas abbas1() {
Abbas abbas = new Abbas();
abbas.name = "abbas1";
return abbas;
}

@Bean
public Abbas abbas2() {
Abbas abbas = new Abbas();
abbas.name = "abbas2";
return abbas;
}

// this is not understandable, hence the parameter name is NOT available at runtime
@Bean
public Fernas fernas1(Abbas abbas1) {
Fernas fernas1 = new Fernas();
fernas1.abbas = abbas1;
return fernas1;
}

// this is not understandable, hence the parameter name is NOT available at runtime
@Bean
public Fernas fernas2(Abbas abbas2) {
Fernas fernas2 = new Fernas();
fernas2.abbas = abbas2;
return fernas2;
}
}
edit: такая же проблема и решение @Javier Оба работают на методе и конструктор Параметры.

Подробнее здесь: https://stackoverflow.com/questions/486 ... parameters

Вернуться в «JAVA»