在我的 Spring MVC 应用程序中,我有一个具有 @Autowired
Service 类的 Controller (单例)。
现在我需要更改 Service 类的范围,因为我在 bean 配置中将其更改为,
<bean id="managerService" class="com.company.xyz" scope="session" />
由于它是在单例类中自动连接的,因此返回的服务类实例始终相同。我真正需要的是一个 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范围配置返回实例?
提前致谢
最佳答案
除了配置之外,您无需更改任何内容。因此,您只需更改 XML 即可。
<bean id="managerService" class="com.company.xyz" scope="session" />
现在发生的情况是,Spring 将使用一些 AOP/代理魔法并为您提供 ManagerService
的代理,而不是 ManagerService
的实际实例。对于代理上调用的每个方法,它将在所需的范围内查找 ManagerService
实例。它将创建一个新实例或检索它,并调用该实例的实际方法。
关于java - @Inject 和 java.security.Provider 组合是否给出了实例的范围配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59085291/