2016-12-21 4 views
0

ich eine Klasse Foo in Paket com.example.dao -Spring - Injizieren Instanz der Klasse mit nur statischen Mitgliedern

@Component 
public class Foo { 
    public static final String nameAbc = "Abc"; 
    public static final String nameDef = "Def"; 
    public static List<String> getNames() { 
     return ImmutableList.of(nameAbc, nameDef); 
    } 

    // I created this for testing purpose. 
    // I was testing if maybe Spring needs an instance of class to inject. 
    public static Foo instance = new Foo(); 
} 

In einer Configuration BeanConfig Klasse mag ich ein List<Foo> injizieren und einige Betreiber darauf ausführen -

@Configuration 
public class BeanConfig { 

    private List<Foo> foos; 

    @Autowired 
    public void setFoos(List<Foo> foos) {this.foos = foos;} 

    @Bean 
    public Bar bar() { 
     // using foos in some logic here for creating Bar bean 
    } 
} 

ich habe auch versucht @ComponentScan auf BeanConfig-Klasse -

@ComponentScan(basePackages = "com.example.dao") 

aber Klasse Foo ist immer noch nicht injiziert, da ich eine leere Liste bekomme. Was genau ist der Fehler hier?

Update - Es kam eine andere Frage sein aus - einige Bohnen in com.example.dao Paket, das @ComponentScan verursacht hatte, nicht Standardkonstruktoren hatte, eine Ausnahme zu werfen, während ihre Instanzen zu schaffen. Durch das Aktualisieren der Konstruktoren wurde das Problem behoben.

Antwort

0

Ich habe Spring Boot verwendet, um Ihren Code zu testen. Bitte überprüfen Sie Ihre Konfiguration
2016.12.21 20: 45: 36,326 INFO 25224 --- [main] com.mycompany.app.Application: Gestartet Anwendung in 11,997 Sekunden (JVM läuft für 12,861)

Ergebnis: [ abc, Def]

@Configuration 
@ComponentScan 
@EnableAutoConfiguration 
public class Application { 
    @Autowired 
    private Environment env; 

    private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); 

    @PostConstruct 
    public void initApplication() throws IOException { 
     LOGGER.info("Running with Spring profile(s) : {}", env.getActiveProfiles()); 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 

     List<String> list = Foo.getNames(); 
     System.out.println(list); 
    }  
} 
0

Es kam eine andere Frage sein aus - einige Bohnen in com.example.dao Paket nicht Standardkonstruktoren hatte die @ComponentScan verursachte eine Ausnahme zu werfen, während ihre Instanzen zu schaffen. Durch das Aktualisieren der Konstruktoren wurde das Problem behoben.

Verwandte Themen