自动装配的Bean在组件类中为null

时间:2019-12-03 19:06:01

标签: java spring spring-boot spring-mvc dependency-injection

我已经在主类中创建了RestTemplate Bean,并通过使用@Autowired将该bean注入到另一个不同包的类中。当我尝试使用它为null时。

主要类别: 包:com.ff.filter

@ComponentScan(basePackages= {"com.ff"})
@SpringBootApplication
public class CcFilterSearchApplication {

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

    @Bean
    @Primary
    RestTemplate restTemplate() {

        return new RestTemplate();
    }

    }

我在其中注入了bean的软件包: com.ff.filter.friendlist

    @Component
    public class CustomFriendList {


        @Autowired
        RestTemplate restTemplate;

        @PostConstruct
        public void init(){
            System.out.println("inti  "+restTemplate);
        }

        public List<String> blockedList(String userId) throws JSONException {

            System.out.println("restTemplate   "+restTemplate);

        }
}

当我调用此(blockedList)方法restTemplate打印null时,请任何人帮助。

2 个答案:

答案 0 :(得分:1)

如果CustomFriendList组件未通过Spring机制初始化,即由于它是通过new CustomFriendList()创建的,则RestTemplate成员不会自动装配,因此null。 >

您可能需要to create一个@SpringBootTest,注入组件,然后测试功能。

@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTest {

    @Test
    public void blockedList(CustomFriendList friendList) throws Exception {
        List<String> blocked = friendList.blockedList("testUserId");
        blocked.forEach(System.out::println);
    }

}

答案 1 :(得分:0)

@自动连线 CustomFriendList customFriendList;

与其创建新对象Autowire bean,不如使它工作