3.10.7 为component-scan组件提供作用域

与Spring管理的组件一样,默认的最常见的作用域是单例singleton。 然而,有时你需要其他的作用域,可以通过@Scope注解来指定。 只需在注解中提供作用域的名称:

@Scope("prototype")
@Repository
public class MovieFinderImpl implements MovieFinder {
    // ...
}

有关特定于Web的作用域的详细信息,请参见第3.5.4节“请求,会话,应用程序和WebSocket作用域”

[Note]
想要自己提供自定义作用域解析的策略,而不是依赖于基于注解的方法,得实现 ScopeMetadataResolver接口,并确保包含一个默认的无参数构造函数。 然后,在配置扫描程序时提供完全限定类名:
@Configuration
@ComponentScan(basePackages = "org.example", scopeResolver = MyScopeResolver.class)
public class AppConfig {
       ...
   }
<beans>
    <context:component-scan base-package="org.example"
            scope-resolver="org.example.MyScopeResolver" />
</beans>

当使用某个非单例作用域时,为作用域对象生成代理也许非常必要。原因参看“作为依赖关系的作用域bean”一节中的描述。 component-scan元素中有一个scope-proxy属性,即可实现此目的。它的值有三个选项:no, interfaces, and targetClass,比如下面的配置会生成标准的JDK动态代理:

@Configuration
@ComponentScan(basePackages = "org.example", scopedProxy = ScopedProxyMode.INTERFACES)
public class AppConfig {
       ...
   }
<beans>
    <context:component-scan base-package="org.example"
        scoped-proxy="interfaces" />
</beans>

results matching ""

    No results matching ""