最后这一章提供了一些和动态语言有关的小知识点。
使用Spring AOP框架对脚本化bean进行通知已经成为可能。Spring AOP框架实际上不关心需要被 通知的bean是否是脚本化bean,因此你所使用的全部AOP用例和功能对脚本化bean都有效。 唯一需要注意的是,通知脚本化bean的时候,你不能使用基于类的代理, 而只能使用基于接口的代理。
当然不用局限于在通知脚本化bean方面,你也可以使用支持的动态语言实现切面, 并使用该切面通知其他的Spring bean。这样才是真正的利用了动态语言支持的优势。
在不是马上起效的情况中,脚本化bean当然也能和其他bean一样定义作用域。
<lang:language/>
元素的scope
属性可以帮助你控制底层的脚本化bean的作用域,
这样这些脚本化bean就和普通的bean没有区别了。(scope的默认值任然是singleton,
和普通bean没有区别。)
下面的示例使用scope
属性将Groovy bean定义为prototype。
<?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-2.5.xsd">
<lang:groovy id="messenger" script-source="classpath:Messenger.groovy" scope="prototype">
<lang:property name="message" value="I Can Do The RoboCop" />
</lang:groovy>
<bean id="bookingService" class="x.y.DefaultBookingService">
<property name="messenger" ref="messenger" />
</bean>
</beans>
第 3 章 IoC(控制反转)容器中的第 3.4 节 “Bean的作用域”章节详细讨论了Spring框架支持的作用域。