Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 范围内的代理模式_Java_Spring_Spring Boot_Spring Mvc - Fatal编程技术网

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
端点)。它应该给出同样的结果。