java - 在 groovy bean 中注入(inject) Spring bean

标签 java spring groovy

我有带有 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";
    }

}

但是当我尝试注入(inject)一些 Spring bean 时,它总是空的。

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 可以从调用上下文中获取。

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";
    }

}

关于java - 在 groovy bean 中注入(inject) Spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24279274/

相关文章:

java - 如何通过传递对象作为参数来实例化 CDI bean,就像我从参数化构造函数在纯 Java 中实例化新对象一样?

java - FirebaseUI-无法识别新用户

java - 如何关闭 ClassPathXmlApplicationContext

grails - groovy/grails - 无法使 HTTPBuilder 与 URL 一起工作(由 Paypal 提供)

scripting - Windows 批处理脚本的良好替代方案?

java - Guice:如何为一种类型获取多个@Provides?

java - 如何使用apache poi从excel读取数据并将数据存储到String[][]数组中?

java - 如果没有这个简单项目中启用的注释驱动支持,为什么资源映射不起作用?

Spring MVC-当我尝试使用 proxyMode=ScopedProxyMode.TARGET_CLASS 时出现错误

groovy - SOAPUI 中 "Context"和 "TestRunner"之间的区别是什么?