如果具有原型范围的bean包含在具有单一范围的bean中,将会发生什么

时间:2014-05-31 12:39:14

标签: spring

我有一个具有单例范围(car)的类,它包含具有原型范围的另一个类(Steering)的引用。现在每当我尝试打印具有单例范围的类的哈希码和具有原型范围的类时,哈希码的值是来了。

Car car=(Car)ac.getBean("SingletonBean");
Steering steering=car.getSteering();
System.out.println("singleton obj >"+car.hashCode());
System.out.println("singleton obj >"+steering.hashCode());
Car car1=(Car)ac.getBean("SingletonBean");
Steering steering1=car.getSteering();
System.out.println("singleton obj >"+car1.hashCode());
System.out.println("singleton obj >"+steering1.hashCode());

汽车的哈希码变得相同,因为同样的对象被返回,因为它的范围是单例。这就是为什么转向的哈希码也会变得相同,因为正在返回相同的汽车对象。但是如果Steering在原型范围内,它的哈希码应该是不同的??

由于

3 个答案:

答案 0 :(得分:0)

原型范围意味着每次向它询问有问题的bean名称时,都会从spring上下文中获取不同的对象。但是当你向一个单独的bean注入一些东西时,你只需要一次依赖性的上下文(在注入时)。单例bean将获得对原型bean的一个引用,然后从那时起挂在同一个对象上。

答案 1 :(得分:0)

发生的事情是完全合理的。由于只有一个Car类型的bean,显然只有一个Steering对象被使用,因此哈希码相同。

但是,如果你在哪里有另一个类型,比如说Bus并且你有一个类型的Spring托管bean,它依赖于Steering,那么转向对象注入到类型为{的{ {1}}与注入Bus类型的bean的注释不同。

在下面的代码片段中,断言将传递

Car

答案 2 :(得分:0)

Method Injection将让我们改变在singleton-scoped bean中处理prototype-scoped的方式。

关注此link