java从groovy脚本获取Spring@Value
内部Java代码:
@Value("${myVar}") private String myVar;
Groovy代码内部:
import org.springframework.beans.factory.annotation.Value;
import groovy.transform.Field;
@Field @Value('${myVar}') String myVar;
return myVar;
返回null
假设未传入Beans
和myVar
,如何从Groovy脚本获取myVar
# 1 楼答案
您需要确保groovy脚本由spring管理,您可以在类上添加@Service或@Component注释。见下面的例子
# 2 楼答案
如果我理解正确,您希望Spring上下文在Groovy脚本执行期间可用,并对脚本属性执行通常的注入
Groovy脚本被编译成Groovy类,因此您应该能够简单地使用
beanFactory.autowireBean(this)
。然而,要首先获得对BeanFactory
的引用,需要手动启动Spring上下文,如下所示:(您可能需要调整
new ClassPathXmlApplicationContext("path/to/applicationContext.xml")
根据您喜欢使用什么方法来引导您的Spring上下文,根据您的需要进行分类;此外,如果脚本是更大代码库的一部分,那么您可能希望创建一个比应用程序其余部分更小的应用程序上下文,以节省启动时间并避免常见的副作用。不过,这取决于用例)我唯一不确定的是
@Field
在将变量转换为字段时是否保留了原始注释,但如果没有任何错误,我会假设是这样如果没有保留注释,您可以声明一个简单的带注释的POJO bean作为可注入属性的容器,并调用
def myPojo = new Pojo(); context.getBeanFactory()).autowireBean(myPojo)