@Inject和java.security.Provider组合是否根据其范围配置提供了实例?

问题描述 投票:0回答:1

在我的Spring MVC应用程序中,我有一个具有@Autowired Service类的控制器(显然是单例)。现在,我需要更改Service类的范围,以便在Bean配置中将其更改为,

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

由于它是自动连接到单例类中的,因此服务类实例始终返回相同的值。我真正需要的是一个会话范围实例。为了解决这个问题,我实现了@Inject(很可能类似于Spring的@Autowired)和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作用域配置返回实例?

先感谢谁经历或思考。

java spring spring-mvc autowired inject
1个回答
1
投票

您无需更改配置即可。因此,您需要做的就是XML更改。

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

现在发生的是,Spring将使用一些AOP /代理魔术代替ManagerService的实际实例,并为您提供ManagerService的代理。对于代理上调用的每个方法,它将查找ManagerService实例所需的范围。它将创建一个新实例或检索它,然后在该实例上调用实际方法。

© www.soinside.com 2019 - 2024. All rights reserved.