1.5.5.2. Using a Custom Scope (使用自定义作用域)

 Spring Framework Documentation (5.3.10)

Core

IoC Container, Events, Resources, i18n, Validation, Data Binding, Type Conversion, SpEL, AOP.

   Core Technologies

1. The IoC Container

1.1. Introduction to the Spring IoC Container and Beans(Spring IoC容器和bean简介)

1.2. Container Overview (容器概览)

1.3. Bean Overview (Bean概览)

1.4. Dependencies(依赖)

1.5. Bean Scopes(Bean作用域)

1.5.1. The Singleton Scope (单例作用域)

1.5.2. The Prototype Scope(Prototype作用域)

1.5.3. Singleton Beans with Prototype-bean Dependencies(单例和原型Bean的依赖)

1.5.4. Request, Session, Application, and WebSocket Scopes

1.5.4.1. Initial Web Configuration (初始化Web配置)

1.5.4.2. Request scope(请求作用域)

1.5.4.3. Session Scope(会话作用域)

1.5.4.4. Application Scope(应用作用域)

1.5.4.5. Scoped Beans as Dependencies (具有作用域的bean作为依赖项)

1.5.4.5.1 Choosing the Type of Proxy to Create(选择待创建代理的类型)

1.5.5. Custom Scopes (自定义作用域)

1.5.5.1. Creating a Custom Scope(创建自定义作用域)

1.5.5.2. Using a Custom Scope (使用自定义作用域)


下载此文档精编完整版

 No.内容下载地址文档内容目录
1中英双语精编版 第一部分PDF下载内容目录
2中英双语精编版 第二部分PDF下载内容目录
3中文精编版 第一部分PDF下载内容目录
4中文精编版 第二部分PDF下载内容目录

更多章节内容,请点击查看:  Core Technologies


1.5.5.2. Using a Custom Scope (使用自定义作用域)

After you write and test one or more custom Scope implementations, you need to make the Spring container aware of your new scopes. The following method is the central method to register a new Scope with the Spring container:

在编写和测试一个或多个自定义作用域实现之后,您需要让Spring容器知道您的新作用域。以下方法是向Spring容器注册新作用域(Scope )的中心方法(central method):

Java

void registerScope(String scopeName, Scope scope);

Kotlin

fun registerScope(scopeName: String, scope: Scope)

This method is declared on the ConfigurableBeanFactory interface, which is available through the BeanFactory property on most of the concrete ApplicationContext implementations that ship with Spring.

此方法在ConfigurableBeanFactory 接口上声明,该接口可通过Spring附带的大多数具体ApplicationContext 实现的BeanFactory属性获得。

The first argument to the registerScope(..) method is the unique name associated with a scope. Examples of such names in the Spring container itself are singleton and prototype. The second argument to the registerScope(..) method is an actual instance of the custom Scope implementation that you wish to register and use.

Suppose that you write your custom Scope implementation, and then register it as shown in the next example.

 registerScope(..) 方法的第一个参数是与作用域关联的唯一名称(unique name associated with a scope)。Spring容器中此类名称的示例有singletonprototype registerScope(..)方法的第二个参数是您希望注册和使用的自定义作用域实现(custom Scope implementation)的实际实例。

假设编写自定义作用域实现(custom Scope implementation),然后注册它,如下一个示例所示。

The next example uses SimpleThreadScope, which is included with Spring but is not registered by default. The instructions would be the same for your own custom Scope implementations.

下一个示例使用SimpleThreadScope,它包含在Spring中,但默认情况下未注册。对于您自己的自定义作用域实现,指令将是相同的。

Java

Scope threadScope = new SimpleThreadScope() ;
beanFactory.registerScope("thread", threadScope);

Kotlin

Val  threadScope = SimpleThreadScope() 
beanFactory.registerScope("thread", threadScope)

You can then create bean definitions that adhere to the scoping rules of your custom Scope, as follows:

然后,您可以创建符合您的自定义Scope的作用域规则(scoping rule)的bean定义,如下所示:

<bean id="..." class="..." scope="thread">

With a custom Scope implementation, you are not limited to programmatic registration of the scope. You can also do the Scope registration declaratively, by using the CustomScopeConfigurer class, as the following example shows:

使用自定义Scope实现,您不限于通过编程注册作用域。您还可以使用CustomScopeConfigurer 类以声明方式进行作用域注册,如下例所示:

<?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:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd">

    <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
        <property name="scopes">
            <map>
                <entry key="thread">
                    <bean class="org.springframework.context.support.SimpleThreadScope"/>
                </entry>
            </map>
        </property>
    </bean>

    <bean id="thing2" class="x.y.Thing2" scope="thread">
        <property name="name" value="Rick"/>
        <aop:scoped-proxy/>
    </bean>

    <bean id="thing1" class="x.y.Thing1">
        <property name="thing2" ref="thing2"/>
    </bean>

</beans>

When you place <aop:scoped-proxy/> within a <bean> declaration for a FactoryBean implementation, it is the factory bean itself that is scoped, not the object returned from getObject() .

当您将<aop:scoped-proxy/>放在FactoryBean实现的<bean>声明中时,具有作用域的bean是工厂bean本身,而不是从getObject() 返回的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月满闲庭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值