24.5. Bits and bobs

24.5. Bits and bobs

最后这一章提供了一些和动态语言有关的小知识点。

24.5.1. AOP - 通知脚本化bean

使用Spring AOP框架对脚本化bean进行通知已经成为可能。Spring AOP框架实际上不关心需要被 通知的bean是否是脚本化bean,因此你所使用的全部AOP用例和功能对脚本化bean都有效。 唯一需要注意的是,通知脚本化bean的时候,你不能使用基于类的代理, 而只能使用基于接口的代理

当然不用局限于在通知脚本化bean方面,你也可以使用支持的动态语言实现切面, 并使用该切面通知其他的Spring bean。这样才是真正的利用了动态语言支持的优势。

24.5.2. 作用域

在不是马上起效的情况中,脚本化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框架支持的作用域。