使用Java配置中的Spring动态语言支持

JBa*_*uch 8 spring spring-java-config

我想使用Spring Framework的动态语言支持.

在XML我只用了lang命名空间,但我想使用Java配置(即@Configuration类).

我可以想象我可以通过初始化org.springframework.scripting.configpackage,inc中的所有地狱来做到这一点.他们创造的所有BeanPostProcessors,Handlers,Parsers和FactoryBeans,但我真的不想去那里.

还有其他方法吗?如果没有,那么从Groovy脚本创建可重新加载的bean所需的最小配置是什么?

Art*_*lan 7

你为什么不直接通过电子邮件询问我们?:-)

我看到XML Lang的支持非常神奇.有足够的东西是基于BeanDefinition和它的attributes.另外还有一些钩子ProxyFactoryCGLIB用于lang:property.

我所看到的JavaConfig是一些Java类包装的ScriptEvaluatorRefreshableResourceScriptSourceSpring集成:

@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class RefreshableScriptJavaConfigTests {

    @Autowired
    private Calculator calculator;

    @Test
    public void testGroovyRefreshableCalculator() {
        assertEquals(5, this.calculator.add(2, 3));
    }

    @Configuration
    public static class ContextConfiguration {

        @Value("classpath:org/springframework/integration/scripting/config/jsr223/Calculator.groovy")
        private Resource groovyScriptResource;

        @Bean
        public ScriptEvaluator groovyScriptEvaluator() {
            return new GroovyScriptEvaluator();
        }

        @Bean
        public Calculator calculator() {
            return new Calculator(new RefreshableResourceScriptSource(this.groovyScriptResource, 1000));
        }

    }

    public static class Calculator {

        private final ScriptSource scriptSource;

        @Autowired
        private ScriptEvaluator scriptEvaluator;

        public Calculator(ScriptSource scriptSource) {
            this.scriptSource = scriptSource;
        }

        public int add(int x, int y) {
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("x", x);
            params.put("y", y);
            return (int) this.scriptEvaluator.evaluate(this.scriptSource, params);
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

在哪里Calculator.groovy:

x + y
Run Code Online (Sandbox Code Playgroud)

我理解它不像从XML定义的界面和配置看起来那么灵活,但至少它会帮助你看到我们的位置.

随意提出有关此问题的JIRA问题,我们将看到我们可以在这里做些什么.喜欢的东西@EnableScripting@ScriptSource(refreshDelay = 1000)Resource @Bean方法.

我想现在你可以只使用@Import一些带有lang定义的XML片段.

干杯,阿尔乔姆