两次调用了new方法,但是最后创建的两个对象地址相同
<bean id="com" class="com.LL.sp4.Computer"></bean>
@Configuration//表示该类可以作为bean定义的来源
public class Computer {
@Bean
public Screen getScreen(){
System.out.println("调用了配置信息");
return new Screen();
}
}
ApplicationContext context =
new AnnotationConfigApplicationContext(Computer.class);
Screen bean = context.getBean(Screen.class);
Screen bean2 = context.getBean(Screen.class);
System.out.println(bean);
System.out.println(bean2);
System.out.println(bean==bean2);
输出为false
下面这个代码的意思是:定义一个bean,spring框架启动过程中会自动执行这个getScreen方法,生产一个bean。因为默认是单例模式,后续每次getBean都会拿前面生产的那个,并不是你想的每次都执行getScreen。
@Bean
public Screen getScreen(){
System.out.println("调用了配置信息");
return new Screen();
}
不是只调用了一次new 吗?
调用了getScreen方法会打印内容:调用了配置信息
控制台上只看到了一次打印呀
Spring管理的bean默认单例,指定为prototype就不是一个对象了
因为Spring的的bean配置默认是单例模式,即加入到Spring容器中的bean对象全局唯一,不管你getBean多少次,获取到的都是同一个对象。
如果想要结果为false,那么修改Spring的bean配置中scope属性来配置作用域,将scope配置成prototype,模式设为原型模式,这样每次get都会创建新的对象
<bean id="com" class="com.LL.sp4.Computer" scope=“prototype”></bean>
```xml
```
你new了一次,调用了两次同一个context的getBean,结果当然一样