2017-05-09 81 views
3

問題:如何在彈簧@Bean(如下面的MyService)中訪問varargs的啓動方法?如何訪問spring bean中的命令行參數?

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

@Component 
public MyService { 
     public void run() { 
       //read varargs 
     } 
} 

Java的罐子[jar文件] [命令行參數]

+0

其可變參數,你是什麼意思?參數傳遞給你的主類或者一般的可變參數? – pvpkiran

+0

我的意思是從命令行啓動jar時傳遞的參數。 – membersound

+2

如何實現具有方法run(String ...)的CommandLineRunner類,您可以獲得這個可變參數 – pvpkiran

回答

7

通過分析彈簧源代碼,似乎彈簧在類的方法prepareContext寄存器ApplicationArguments類型的單豆SpringApplication

context.getBeanFactory().registerSingleton("springApplicationArguments", 
      applicationArguments); 

所以我認爲你可以在你的服務自動裝配這個bean:

@Component 
public MyService { 

     @Autowired 
     private ApplicationArguments applicationArguments; 

     public void run() { 
      //read varargs 
      applicationArguments.getSourceArgs(); 

     } 
} 
2

由於@pvpkiran的提示:

@Component 
public class CommandLineHolder implements CommandLineRunner { 
    private String[] args; 

    @Override 
    public void run(String... args) throws Exception { 
     this.args = args; 
    } 

    public String[] getArgs() { 
     return args; 
    } 
}