Bean Spring avec arguments de constructeur d’exécution

Je souhaite créer un bean Spring dans la configuration Java Spring avec certains arguments de constructeur transmis lors de l’exécution. J’ai créé la configuration Java suivante, dans laquelle il existe un bean fixedLengthReport qui attend quelques arguments dans le constructeur.

@Configuration Public AppConfig { @Autowrire Dao dao; @Bean @Scope(value = "prototype") **//SourceSystem can change at runtime** public FixedLengthReport fixedLengthReport(Ssortingng sourceSystem) { return new TdctFixedLengthReport(sourceSystem, dao); } 

Mais j’obtiens l’ erreur que sourceSystem n’a pas pu se connecter parce qu’aucun bean n’a été trouvé. Comment créer un bean avec des arguments de constructeur à l’exécution?

J’utilise Spring 4.2

Vous pouvez utiliser la prochaine approche:

 @Configuration public class AppConfig { @Autowired Dao dao; @Bean @Scope(value = "prototype") @Lazy(value = true) public FixedLengthReport fixedLengthReport(Ssortingng sourceSystem) { return new TdctFixedLengthReport(sourceSystem, dao); } } 

@Lazy signifie que Spring @Lazy pas ce bean dès le début, mais le fera plus tard à la demande. Maintenant, pour obtenir une instance de ce bean, vous devez faire ensuite:

 @Controller public class ExampleController{ @Autowired private BeanFactory beanFactory; @RequestMapping("/") public Ssortingng exampleMethod(){ TdctFixedLengthReport report = beanFactory.getBean(TdctFixedLengthReport.class, "sourceSystem"); } } 

Notez que, parce que votre bean ne peut pas être instancié au démarrage, vous ne devez pas autoriser directement votre bean. Sinon, l’annotation @Lazy sera ignorée et Spring essaiera de créer une instance de bean par lui-même. La prochaine utilisation entraînera une erreur:

 @Controller public class ExampleController{ //next declaration will cause ERROR @Autowired private TdctFixedLengthReport report; } 

Votre code semble bien, pour obtenir le prototype avec des parameters, utilisez la méthode BeanFactory # getBean (Ssortingng name, Object … args).

Regardez Spring Java Config: comment créer un @Bean de scope prototype avec des arguments d’exécution? BeanFactory # getBean (nom de chaîne, object … arguments) correspond à ce que vous recherchez.

Je suppose que votre IDEA (dans mon cas IntelliJ IDEA version 15.) vous donne l’erreur et ce n’est pas une erreur d’exécution / de compilation.

Dans IntelliJ, vous pouvez modifier le réglage des inspections de spring.

  • Allez dans le fichier -> parameters.
  • Tapez les inspections dans le champ de recherche.
  • Accédez à Spring Core-> Code-> Autowire pour les classes de beans.
  • Passer de “Erreur” à “avertissement faible”