JSR-223 based StandardScriptFactory (including <lang:std> support)

This commit also completes 4.2 schema variants in spring-context.

Issue: SPR-5215
This commit is contained in:
Juergen Hoeller
2015-05-08 23:56:08 +02:00
parent 4bf32578b5
commit 1722fa6678
24 changed files with 2439 additions and 38 deletions

View File

@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.2.xsd">
<lang:std id="messenger" script-source="classpath:org/springframework/scripting/groovy/Messenger.groovy">
<lang:property name="message" value="Hello World!"/>
</lang:std>
<lang:std id="messengerWithInterface" script-source="classpath:org/springframework/scripting/groovy/Messenger.groovy"
script-interfaces="org.springframework.scripting.Messenger"/>
<lang:std id="refreshableMessenger" refresh-check-delay="5000"
script-source="classpath:org/springframework/scripting/groovy/Messenger.groovy">
<lang:property name="message" value="Hello World!"/>
</lang:std>
<lang:std id="inlineMessenger" engine="Groovy">
<lang:inline-script>
package org.springframework.scripting.groovy;
import org.springframework.scripting.Messenger
class GroovyMessenger implements Messenger {
def String message;
}
return new GroovyMessenger();
</lang:inline-script>
</lang:std>
<lang:std id="inlineMessengerWithInterface" engine="Groovy" script-interfaces="org.springframework.scripting.Messenger">
<lang:inline-script>
package org.springframework.scripting.groovy;
import org.springframework.scripting.Messenger
class GroovyMessenger implements Messenger {
def String message;
}
return new GroovyMessenger();
</lang:inline-script>
</lang:std>
</beans>

View File

@@ -3,12 +3,11 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.1.xsd">
<lang:groovy id="refreshableMessenger" refresh-check-delay="5000" proxy-target-class="true"
script-source="classpath:org/springframework/scripting/groovy/Messenger.groovy">
<lang:property name="message" value="Hello World!" />
script-source="classpath:org/springframework/scripting/groovy/Messenger.groovy">
<lang:property name="message" value="Hello World!"/>
</lang:groovy>
</beans>

View File

@@ -33,7 +33,7 @@ class GroovyCalculator implements Calculator {
return x + y;
}
}
</lang:inline-script>
</lang:inline-script>
</lang:groovy>
<lang:groovy id="customizer">

View File

@@ -10,8 +10,7 @@
<bean class="org.springframework.scripting.support.ScriptFactoryPostProcessor"/>
<bean id="calculator"
class="org.springframework.scripting.groovy.GroovyScriptFactory">
<bean id="calculator" class="org.springframework.scripting.groovy.GroovyScriptFactory">
<constructor-arg>
<value>inline:
package org.springframework.scripting.groovy;
@@ -25,28 +24,24 @@ class GroovyCalculator implements Calculator {
</constructor-arg>
</bean>
<bean id="messenger"
class="org.springframework.scripting.groovy.GroovyScriptFactory">
<bean id="messenger" class="org.springframework.scripting.groovy.GroovyScriptFactory">
<constructor-arg value="classpath:org/springframework/scripting/groovy/Messenger.groovy"/>
<property name="message" value="Hello World!"/>
</bean>
<bean id="messengerPrototype"
class="org.springframework.scripting.groovy.GroovyScriptFactory"
<bean id="messengerPrototype" class="org.springframework.scripting.groovy.GroovyScriptFactory"
scope="prototype">
<constructor-arg value="classpath:org/springframework/scripting/groovy/Messenger.groovy"/>
<property name="message" value="Hello World!"/>
</bean>
<bean id="messengerInstance"
class="org.springframework.scripting.groovy.GroovyScriptFactory">
<bean id="messengerInstance" class="org.springframework.scripting.groovy.GroovyScriptFactory">
<constructor-arg value="classpath:org/springframework/scripting/groovy/MessengerInstance.groovy"/>
<property name="message" ref="myMessage"/>
</bean>
<bean id="messengerInstanceInline"
class="org.springframework.scripting.groovy.GroovyScriptFactory">
<constructor-arg>
<bean id="messengerInstanceInline" class="org.springframework.scripting.groovy.GroovyScriptFactory">
<constructor-arg>
<value>inline:
package org.springframework.scripting.groovy;
import org.springframework.scripting.Messenger

View File

@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"
default-lazy-init="true">
<bean class="org.springframework.scripting.support.ScriptFactoryPostProcessor"/>
<bean id="calculator" class="org.springframework.scripting.support.StandardScriptFactory">
<constructor-arg value="Groovy"/>
<constructor-arg>
<value>inline:
package org.springframework.scripting.groovy;
import org.springframework.scripting.Calculator
class GroovyCalculator implements Calculator {
int add(int x, int y) {
return x + y;
}
}
</value>
</constructor-arg>
</bean>
<bean id="messenger" class="org.springframework.scripting.support.StandardScriptFactory">
<constructor-arg value="classpath:org/springframework/scripting/groovy/Messenger.groovy"/>
<property name="message" value="Hello World!"/>
</bean>
<bean id="messengerPrototype" class="org.springframework.scripting.support.StandardScriptFactory"
scope="prototype">
<constructor-arg value="classpath:org/springframework/scripting/groovy/Messenger.groovy"/>
<property name="message" value="Hello World!"/>
</bean>
<bean id="messengerInstance" class="org.springframework.scripting.support.StandardScriptFactory">
<constructor-arg value="classpath:org/springframework/scripting/groovy/MessengerInstance.groovy"/>
<property name="message" ref="myMessage"/>
</bean>
<bean id="messengerInstanceInline" class="org.springframework.scripting.support.StandardScriptFactory">
<constructor-arg value="Groovy"/>
<constructor-arg>
<value>inline:
package org.springframework.scripting.groovy;
import org.springframework.scripting.Messenger
class GroovyMessenger implements Messenger {
def String message;
}
return new GroovyMessenger();
</value>
</constructor-arg>
<property name="message" ref="myMessage"/>
</bean>
<bean id="myMessage" class="java.lang.String">
<constructor-arg value="Hello World!"/>
</bean>
</beans>

View File

@@ -0,0 +1,25 @@
require 'java'
class RubyMessenger
include org.springframework.scripting.ConfigurableMessenger
@@message = "Hello World!"
def setMessage(message)
@@message = message
end
def getMessage
@@message
end
def setTestBean(testBean)
@@testBean = testBean
end
def getTestBean
@@testBean
end
end
RubyMessenger.new

View File

@@ -0,0 +1,11 @@
require 'java'
class RubyPrinter
include org.springframework.scripting.jruby.Printer
def print(obj)
puts obj.getContent
end
end
RubyPrinter.new

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.2.xsd">
<lang:std id="messenger"
script-source="classpath:org/springframework/scripting/jruby/MessengerWithInstance.rb">
</lang:std>
<lang:std id="calculator" engine="jruby">
<lang:inline-script>
require 'java'
class RubyCalculator
include org.springframework.scripting.Calculator
def add(x, y)
x + y
end
end
RubyCalculator.new
</lang:inline-script>
</lang:std>
<lang:std id="refreshableMessenger"
script-source="classpath:org/springframework/scripting/jruby/MessengerWithInstance.rb"
refresh-check-delay="5000">
</lang:std>
</beans>

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean class="org.springframework.scripting.support.ScriptFactoryPostProcessor"/>
<bean id="calculator" class="org.springframework.scripting.support.StandardScriptFactory">
<constructor-arg value="jruby"/>
<constructor-arg>
<value>inline:
require 'java'
class RubyCalculator
include org.springframework.scripting.Calculator
def add(x, y)
x + y
end
end
RubyCalculator.new
</value>
</constructor-arg>
<constructor-arg value="org.springframework.scripting.Calculator"/>
</bean>
<bean id="messenger" class="org.springframework.scripting.support.StandardScriptFactory">
<constructor-arg value="jruby"/>
<constructor-arg value="classpath:org/springframework/scripting/jruby/MessengerWithInstance.rb"/>
<constructor-arg value="org.springframework.scripting.Messenger"/>
</bean>
<bean id="printer" class="org.springframework.scripting.support.StandardScriptFactory">
<constructor-arg value="jruby"/>
<constructor-arg value="classpath:org/springframework/scripting/jruby/PrinterWithInstance.rb"/>
<constructor-arg value="org.springframework.scripting.jruby.Printer"/>
</bean>
</beans>

View File

@@ -0,0 +1 @@
function getMessage() { return "Hello World!" }

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.2.xsd">
<lang:std id="messengerWithInterface" script-source="classpath:org/springframework/scripting/support/Messenger.js"
script-interfaces="org.springframework.scripting.Messenger"/>
<lang:std id="refreshableMessengerWithInterface" refresh-check-delay="5000"
script-source="classpath:org/springframework/scripting/support/Messenger.js"
script-interfaces="org.springframework.scripting.Messenger">
</lang:std>
<lang:std id="inlineMessengerWithInterface" engine="JavaScript"
script-interfaces="org.springframework.scripting.Messenger">
<lang:inline-script>
function getMessage() { return "Hello World!" }
</lang:inline-script>
</lang:std>
</beans>