inyecta primavera @Autowired campos durante la instanciación de clase manual de

alexandroid:

En mi proyecto me sorprende ver que la primavera (4.3) parece intentar Autowire dependencias para las clases, incluso cuando se crea una instancia de forma manual.

MyClass.java (Tenga en cuenta las anotaciones Lombok):

@NoArgsConstructor
@AllArgsConstructor
public class MyClass {
    @Autowired
    private MyClassDependency dependency;
}

MyClassDependency.java utiliza un método de fábrica y no hay anotaciones de primavera:

public class MyClassDependency {
    public static MyClassDependency create() { return new MyClassDependency(); }
}

Primavera config resultando en NoSuchBeanDefinitionException:

@Configuration
public class SpringConfig {
    @Bean
    public MyClass myClass() {
        return new MyClass(MyClassDependency.create());
    }
}

Proporcionando el grano hace feliz a la primavera:

@Configuration
public class SpringConfig {
    @Bean
    public MyClass myClass() {
        return new MyClass(); // let autowire inject dependencies
    }
    @Bean
    public MyClassDependency myClassDependency() {
        return MyClassDependency.create();
    }
}

Esta fue una gran sorpresa para mí. Me gustaría tener la primera versión más simple de la config ... ¿Dónde está este comportamiento viene de / controlada? (Es posible que me lo perdí o sacó de algunas dependencias).

PS: Para aclarar, MyClassel código está fuera de mi control, pero que puede cambiar de configuración de la primavera. Estoy buscando para entender cómo la primavera intercepta la llamada al constructor withing un método de frijol y si el constructor se puede utilizar en su lugar.

persicsb:

El problema es el siguiente:

  1. Usted anotada un campo con @Autowired - que le dice a la primavera, que hay una dependencia que se necesita inyectar allí
  2. Usted anotada con un método @Bean - que pone el valor de retorno en el contexto de la primavera.
  3. Cuando la primavera procesa el valor de retorno del objeto @ anotada-Bean, que comienza a proces sus anotaciones - y hay un campo con una anotación, que le dice a la primavera para inyectar una dependencia existe, incluso si el campo ya tiene un valor asignado.
  4. intentos de primavera para inyectar la dependencia aquí, pero que la dependencia no existe en el contexto de primavera, por lo que la inyección falla.

Así que tener @Bean, pero inyectar manualmente una dependencia @Autowired en conflicto entre sí, es posible que ahora entiendo, ¿por qué - que no deberá inyectar granos Autowired manualmente! Autowired es una anotación que dice que él contenedor CI para hacer algunos trabajos de inyección.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=179371&siteId=1
Recomendado
Clasificación