2017-05-09 145 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; 
    } 
}