使用应用程序属性填充的带有Hashmap的自动装配bean不起作用

时间:2019-12-06 05:06:46

标签: java spring spring-boot autowired

我想从Spring Boot Application将Hashmap的值传递给CLI。我收到一个空指针异常。请让我知道这是怎么回事?

应用程序类

@SpringBootApplication
@ComponentScan(basePackages = { "com.xyz.movie*"})
public class Application  implements CommandLineRunner{
@Autowired
private Environment environment;
@Autowired
ApplicationContext context;

@Autowired
MovieCollections movieCollections;

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

@Override
public void run(String... arg0) throws Exception {
    try {
        Customer customer = new Customer();
    //  MovieCollections collections = (MovieCollections) context.getBean("movieCollections");
        Scanner sc = new Scanner(System.in);
        if(movieCollections==null) {
            System.out.println("it is null");
        }
        else
        {
            System.out.println("it is NOT null");
            System.out.println(movieCollections.getMovieCollectionMap());
        }

        System.out.println("Select Movie: ");
        **// NULL POINTER  HERE**
        for(String s:movieCollections.getMovieCollectionMap().values()) {
            System.out.println(s);
        }

MovieCollections类

@EnableConfigurationProperties
@PropertySource(value ="application.properties")
@ConfigurationProperties(prefix="movies")

public class MovieCollections {

    private Map<String, String> movieCollectionMap;

    public Map<String, String> getMovieCollectionMap() {
        return movieCollectionMap;
    }

    public void setMovieCollectionMap(Map<String, String> movieCollectionMap) {
        this.movieCollectionMap = movieCollectionMap;
    }

MovieCollectionsBean.java

@Configuration
public class MovieCollectionBean {

    @Bean
    public MovieCollections getMovieCollections() {
        return new MovieCollections();
    }

}

applications.properties

movies.M1001=SpiderMan
movies.M1002=Thor
movies.M1003=Logan
movies.M1004=Conjuring2
movies.M1005=StarWars

我得到的是空地图。为什么没有填充地图?

1 个答案:

答案 0 :(得分:0)

尝试将属性更新为c.astype(bool) c.astype(np.int64) c.astype(float) c.astype(int) c.astype(np.float32) ,并将movies.names.M100...类中的字段movieCollectionMap重命名为names

使用MovieCollections时,字段名称应与属性匹配。因此,在这种情况下,@ConfigurationPropertiesprefix,字段名称是movies,哈希图是具有代码和值作为影片名称的键

此外,您需要适当地更新namesgetter方法。