Wie Abhängigkeitsinjektion namentlich in den Spring @Bean -Methodenparametern funktioniertJava

Java-Forum
Anonymous
 Wie Abhängigkeitsinjektion namentlich in den Spring @Bean -Methodenparametern funktioniert

Post by Anonymous »

Ich verstehe Spring DI und wie es im Allgemeinen funktioniert. Fernas2 Parameter werden zur Laufzeit abgewischt. Die Frühling kann jedoch immer noch die richtige Abbas < /code> bean -Instanz in die IT injizieren. < /p>

Code: Select all

@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;
}
}
Bearbeiten: Das gleiche Problem und die gleiche Lösung von @javier. Beide funktionieren auf Methode und Konstruktor Parameter.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post