Est-il possible d'utiliser @Autowired
avec une liste?
Comme j'ai un fichier de propriétés avec des mimetypes et dans mon fichier de classe j'ai quelque chose comme ça
@Autowired
private List<String> mimeTypes = new ArrayList<String>();
Spring 4 prend en charge la possibilité de collecter automatiquement tous les beans d'un type donné et de les injecter dans une collection ou un tableau.
Exemple:
@Component
public class Car implements Vehicle {
}
@Component
public class Bus implements Vehicle {
}
@Component
public class User {
@Autowired
List<Vehicle> vehicles;//contains car and bus
}
@Qualifier("..")
est déconseillé, essayez plutôt de autowire-by-name en utilisant
private @Resource(name="..") List<Strings> mimeTypes;
Voir aussi Comment câbler automatiquement le bean d'usine .
Vous pouvez même créer un Java.util.List
dans votre fichier .xml de printemps et injectez-le via @Qualifier
dans votre application. À partir de la source de données http://static.springsource.org/spring/docs/current/reference/xsd-config.html :
<!-- creates a Java.util.List instance with the supplied values -->
<util:list id="emails">
<value>[email protected]</value>
<value>[email protected]</value>
<value>[email protected]</value>
<value>[email protected]</value>
</util:list>
Cela changerait donc votre câblage en:
@Autowired
@Qualifier("emails")
private List<String> mimeTypes = new ArrayList<String>();
Je suggérerais cette approche puisque vous injectez de toute façon une liste de chaînes.
à votre santé!
[~ # ~] modifier [~ # ~]
Si vous voulez injecter des propriétés, jetez un œil à ceci Comment puis-je injecter une valeur de propriété dans un Spring Bean qui a été configuré à l'aide d'annotations?
Je pense que vous aurez besoin d'un qualificatif au minimum. Et l'appel à "nouveau" semble contraire à l'idée d'utiliser Spring. Vous avez le rôle de Spring confus. Si vous appelez "nouveau", alors l'objet n'est pas sous le contrôle de Spring.
Si le bean câblé automatiquement est déclaré dans la même classe (@Configuration
) Et que vous en avez besoin pour déclarer un autre bean, alors les travaux suivants fonctionnent:
@Bean
public BeanWithMimeTypes beanWithMimeTypes() {
return new BeanWithMimeTypes(mimeTypes());
}
@Bean
public List<String> mimeTypes() {
return Arrays.<String>asList("text/html", "application/json);
}
Naturellement, il se comporte correctement même si vous remplacez le bean mimeTypes
dans une autre configuration. Pas besoin d'annotations explicites @Qualifier
Ou @Resource
.