首页 > 解决方案 > @Inject 和 java.security.Provider 组合是否提供了关于其范围配置的实例?

问题描述

在我的 Spring MVC 应用程序中,我有一个具有@AutowiredService 类的控制器(单例)。现在我需要更改 Service 类的范围,因为我在 bean 配置中将其更改为,

<bean id="managerService" class="com.company.xyz" scope="session" />

由于它是在单例类中自动连接的,因此服务类实例总是返回相同的。我真正需要的是一个会话范围实例。为了解决这个问题,我实现@Inject了(可能类似于@AutowiredSpring)和 Provider。

老的:

@RequestMapping("/home")
public class MyController {

    @Autowired
    ManagerService managerService;

新的:

@RequestMapping("/home")
public class MyController {

    @Inject
    Provider<ManagerService> managerServiceProvider;
    
    ManagerService managerService = managerServiceProvider.get();

在这里,我需要知道,是否Provider.get()返回基于bean范围配置的实例?

提前致谢

标签: javaspringspring-mvcautowiredinject

解决方案


除了配置之外,您不需要更改任何内容。因此,您只需更改 XML 即可。

<bean id="managerService" class="com.company.xyz" scope="session" />

现在发生的情况是ManagerService,Spring 将使用一些 AOP/proxy 魔法而不是ManagerService. 对于代理上调用的每个方法,它将在它需要的范围内查找ManagerService. 它将创建一个新实例或检索它,并在该实例上调用实际方法。


推荐阅读