Java 范围内的代理模式
我有一个下面的Java 范围内的代理模式,java,spring,spring-boot,spring-mvc,Java,Spring,Spring Boot,Spring Mvc,我有一个下面的singletonbean,它有一个原型依赖项。为了获得Prototype依赖关系的不同实例,我使用了proxyMode=ScopedProxyMode.TARGET\u类,但仍然获得相同的Prototype bean实例。然而,使用@Lookup,我可以得到不同的结果。这不是使用proxyMode解决我的用例的正确方法吗 springbootsrestapplication.java ApplicationContext a =SpringApplication.run(Spri
singletonbean
,它有一个原型
依赖项。为了获得Prototype
依赖关系的不同实例,我使用了proxyMode=ScopedProxyMode.TARGET\u类
,但仍然获得相同的Prototype bean实例。然而,使用@Lookup
,我可以得到不同的结果。这不是使用proxyMode
解决我的用例的正确方法吗
springbootsrestapplication.java
ApplicationContext a =SpringApplication.run(SpringBootRestAppApplication.class, args);
UserController u1 =a.getBean(UserController.class);
UserController u2 =a.getBean(UserController.class);
System.out.println(u1==u2);
System.out.println(u1.getU()==u2.getU());
@Component
public class UserController {
@Autowired
UserService u;
public UserService getU() {
return u;
}
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE,proxyMode=ScopedProxyMode.TARGET_CLASS)
public class UserService {
}
UserController.java
ApplicationContext a =SpringApplication.run(SpringBootRestAppApplication.class, args);
UserController u1 =a.getBean(UserController.class);
UserController u2 =a.getBean(UserController.class);
System.out.println(u1==u2);
System.out.println(u1.getU()==u2.getU());
@Component
public class UserController {
@Autowired
UserService u;
public UserService getU() {
return u;
}
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE,proxyMode=ScopedProxyMode.TARGET_CLASS)
public class UserService {
}
UserService.java
ApplicationContext a =SpringApplication.run(SpringBootRestAppApplication.class, args);
UserController u1 =a.getBean(UserController.class);
UserController u2 =a.getBean(UserController.class);
System.out.println(u1==u2);
System.out.println(u1.getU()==u2.getU());
@Component
public class UserController {
@Autowired
UserService u;
public UserService getU() {
return u;
}
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE,proxyMode=ScopedProxyMode.TARGET_CLASS)
public class UserService {
}
O/p
工作如预期。。。试试看
@组件
@范围(值=ConfigurableBeanFactory.Scope\u原型,proxyMode=ScopedProxyMode.TARGET\u类)
类用户服务{
公共静态int instanceID;
用户服务(){
instanceID++;
}
公共整数getInstanceID(){
返回instanceID;
}
}
@RestController
类用户控制器{
最终用户服务;
最终应用上下文应用上下文;
用户控制器(用户服务服务,应用上下文应用上下文){
服务=服务;
this.applicationContext=applicationContext;
}
@GetMapping(“/instanceId”)
公共整数版本(){
return service.getInstanceID();
}
@GetMapping(“/applic”)
公共整数applicVersion(){
返回applicationContext.getBean(UserService.class).getInstanceID();
}
}
参考资料:您正在比较代理对象。编辑了问题“为什么在我的示例中它不起作用?”?我对proxymode的理解是否不正确?@Ghostider改进了我的答案(请参阅
/applic
端点)。它应该给出同样的结果。