在groovy bean中注入Spring bean
我有spring-boot-starter-remote-shell的Spring Boot应用程序。 当我把这个hello.groovy脚本打印出’hello’时就可以了。
package commands import org.crsh.cli.Usage import org.crsh.cli.Command class hello { @Usage("Say Hello") @Command def main(InvocationContext context) { return "hello"; } }
但是当我尝试注入一些Spring bean时,它总是为null。
package commands import org.crsh.cli.Usage import org.crsh.cli.Command import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component import org.springframework.batch.core.launch.JobLauncher @Component class hello { @Autowired JobLauncher jobLauncher; @Usage("Say Hello") @Command def main(InvocationContext context) { if(jobLauncher != null){ return "OK"; }else{ return "NULL"; } return "hello j"; } }
我有@ComponentScan(basePackages={"com....", "commands"})
Spring BeanFactory可以从Invocation上下文中获取。
package commands import org.crsh.cli.Usage import org.crsh.cli.Command import org.crsh.command.InvocationContext; import org.springframework.beans.factory.BeanFactory; import org.springframework.batch.core.launch.JobLauncher class hello { @Usage("Say Hello") @Command def main(InvocationContext context) { BeanFactory beanFactory = (BeanFactory) context.getAttributes().get("spring.beanfactory"); JobLauncher jobLauncher = beanFactory.getBean(JobLauncher.class); if(jobLauncher != null){ return jobLauncher.toString(); }else{ return "NULL"; } return "hello j"; } }