2017-06-02 974 views
3

我使用springboot 1.3.8和我有一個帶參數的構造函數@Autowired但我得到的錯誤:沒有發現默認的構造函數...Springboot使用構造上與@Autowired參數

@SpringBootApplication 
public class App implements CommandLineRunner { 

    private ApplicationContext context; 
    private CLIHelper cliHelper; 

    @Autowired 
    public App(ApplicationContext context, CLIHelper cliHelper) { 
    this.context = context; 
    this.cliHelper = cliHelper; 
    } 

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

答案在你的消息。沒有默認構造函數,即公共App(){...}可用。你爲什麼不在域上使用@Autowired? – lrother

+0

CLIhelper是一個bean嗎? –

+0

是的,CLIhelper是一個bean,它被命名爲@Component –

回答

7

你班級注有@SpringBootApplication,這也是@Configuration。而@Configuration應該有一個默認的無參數構造函數。 從javadoc

@Configuration classes must have a default/no-arg constructor and may not use @Autowired constructor parameters.

由於Spring版本4.3,你可以有構造注射@Configuration類。經過Spring Boot 1.5.3測試,效果很好。

Here是Spring 4.3的發行說明。這裏是你需要的功能:

@Configuration classes support constructor injection.