¿Es posible usar @Autowired
con una lista?Spring autowire a list
Como tengo el archivo de propiedades con tipos MIME y en mi archivo de clase que tener algo como esto
@Autowired
private List<String> mimeTypes = new ArrayList<String>();
¿Es posible usar @Autowired
con una lista?Spring autowire a list
Como tengo el archivo de propiedades con tipos MIME y en mi archivo de clase que tener algo como esto
@Autowired
private List<String> mimeTypes = new ArrayList<String>();
Usted debe ser capaz de Autowire todo el tiempo que la lista es un bean. Luego usaría el @Qualifier
para decirle a Spring qué bean/list usar. Consulte http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation-qualifiers
Creo que necesitará un calificador como mínimo. Y el llamado a "nuevo" parece contrario a la idea de usar Spring. Usted tiene el papel de Spring confundido. Si llama "nuevo", entonces el objeto no está bajo el control de Spring.
Simplemente sobrescribe el objeto completo.Spring no sabía (o no le importaba) que había algo allí antes. –
Usando granos con un perfil de prototipo, incluso puede usar el 'nuevo' y aún así tener ese resorte de frijol manejado por cierto http://static.springsource.org/spring/docs/current/reference/beans.html#beans-factory-scopes -prototipo – chzbrgla
Incluso puede crear un java.util.List
dentro de su resorte .xml e inyectarlo a través de @Qualifier
en su aplicación. Desde el SpringSource 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>
Así que esto iba a cambiar el cableado a:
@Autowired
@Qualifier("emails")
private List<String> mimeTypes = new ArrayList<String>();
que sugeriría este enfoque ya que estás inyectando una lista de cadenas de todos modos.
¡salud!
EDITAR
Si desea inyectar propiedades, echar un vistazo a este How can I inject a property value into a Spring Bean which was configured using annotations?
@Qualifier("..")
no se recomienda, en lugar tratar de Autowire por nombre usando
private @Resource(name="..") List<Strings> mimeTypes;
Vea también How to autowire factorybean.
+1 ¡Excelente hallazgo! Solo estaba tratando de descubrir por qué no podía hacer que funcionara este escenario. –
Spring 4 admite la capacidad de recopilar automáticamente todos los beans de un tipo determinado e insertarlos en una colección o matriz.
Ejemplo:
@Component
public class Car implements Vehicle {
}
@Component
public class Bus implements Vehicle {
}
@Component
public class User {
@Autowired
List<Vehicle> vehicles;//contains car and bus
}
¿Qué sucede cuando no hay un bean de ese tipo definido? ¿Se autocableará una lista vacía? – user2798694
@ user2798694 Debe estar vacía o nula. – ThoQ
Si el grano de autowired se declara en la misma clase (@Configuration
) y que necesita que declare otro bean, a continuación, siguiendo las obras:
@Bean
public BeanWithMimeTypes beanWithMimeTypes() {
return new BeanWithMimeTypes(mimeTypes());
}
@Bean
public List<String> mimeTypes() {
return Arrays.<String>asList("text/html", "application/json);
}
Naturalmente se comporta correctamente incluso si anula el bean mimeTypes
en otra configuración. No es necesario realizar anotaciones explícitas de @Qualifier
o @Resource
.
Esto simplemente muestra cómo usar un constructor (lo cual está bien). Pero debe señalarse que en este ejemplo no es necesario anotar mimeTypes() con @Bean a menos que desee que su resultado esté disponible en el contexto de la aplicación por algún otro motivo que no sea la creación del componente BeanWithMimeTypes. –
Ha pasado tiempo, si alguna de las respuestas fue útil, márquela como correcta, para que otras personas con la misma pregunta puedan identificar fácilmente cualquier respuesta útil. – chzbrgla
posible duplicado de [El cableado automático de una lista utilizando el esquema util da NoSuchBeanDefinitionException] (http://stackoverflow.com/questions/1363310/auto-wiring-a-list-using-util-schema-gives-nosuchbeandefinitionexception) – skaffman