在我的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作用域配置返回实例?
先感谢谁经历或思考。
您无需更改配置即可。因此,您需要做的就是XML更改。
<bean id="managerService" class="com.company.xyz" scope="session" />
现在发生的是,Spring将使用一些AOP /代理魔术代替ManagerService
的实际实例,并为您提供ManagerService
的代理。对于代理上调用的每个方法,它将查找ManagerService
实例所需的范围。它将创建一个新实例或检索它,然后在该实例上调用实际方法。