No haga caso de procesamiento de campo @Valor de bibliotecas dependientes del Procesador de beans Spring Mensaje

conquista:

Estoy usando uno de nuestros proyectos como una dependencia de otra. Una de las clases en el proyecto dependiente es la siguiente:

@Service
public class Dependency {

  @Value("${xyz.value}")
  private String xyz;

  @Value("${abc.value}")
  private String abc;

  public Dependency() {

  }

  public Dependency(String xyz, String abc) {
    this.xyz = xyz;
    this.abc = abc;
  }
}

Estoy tratando de crear una instancia de Dependencyen otro proyecto en el inicio de la siguiente manera:

@Configuration
@PropertySource(value = {
    "classpath:appEnv.properties"
}, ignoreResourceNotFound = true)

public class Test {

  @Bean(name = "dependencyBean")
  public Dependent getDependent() {
    return new Dependent("xyz", "abc");
  }
}

Intentar acceder a la dependencyBeancreada de la siguiente

public class SomeClass {

  AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
  Dependent d = ctx.getBean("dependencyBean"); 

}

Me estoy haciendo la siguiente excepción

BeanCreationException: Error al crear el frijol con el nombre 'dependentBean': La inyección de dependencias autowired fracasó; la excepción jerarquizada es org.springframework.beans.factory.BeanCreationException: No se pudo Autowire campo: xyz java.lang.String privado;

¿Cómo puedo crear una instancia de la clase dependiente sin invocar postProcessPropertyValuesla que intenta resolver los campos con @Valuela anotación?

buræquete:

Usted, en primer lugar, necesita habilitar frijol con anulando;

spring.main.allow-bean-definition-overriding=true

y acaba de tener su grano de encargo tiene el nombre exacto como la @Serviceclase anotada;

@Bean(name = "dependency")
public Dependency getDependent() {
    return new Dependency("xyz", "abc");
}

De este modo se puede anular la @Serviceanotada Dependencycon su grano de inicializado manualmente. Pero para lograr esto, primero hay que rechazar el encargo getDependent()de frijol resultante para desencadenar @Valueanotaciones, para hacer eso, es necesario cambiar la Dependencyclase de @Valuemétodo de inyección de constructor. Cuando es así, sólo que cuando la primavera automáticamente inyecta, las @Valueanotaciones se activan, cuando se llama de forma manual new Dependency("xyz", "abc"), no lo harán.

@Service
public class Dependency {

    private String xyz;
    private String abc;

    @Autowired
    public Dependency(@Value("${xyz.value}") String xyz, @Value("${abc.value}") String abc) {
        this.xyz = xyz;
        this.abc = abc;
    }
}

Con estos cambios, usted no tendrá ningún error con su grano de encargo autowired.

Supongo que te gusta

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