Spring注解系列四:组件注册-@Scope
2020-08-19 本文已影响0人
dinel
转:https://blog.csdn.net/lizhiqiang1217/article/details/89891789
1、默认是单实例的。相当于加了注解@Scope(“singleton”)
@Configuration
public class MainConfig2 {
@Bean("person")
public Person person(){
System.out.println("给容器中添加Person....");
return new Person("张三", 25);
}
}
@Test
public void test02(){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig2.class);
String[] definitionNames = applicationContext.getBeanDefinitionNames();
for (String name : definitionNames) {
System.out.println(name);
}
System.out.println("ioc容器创建完成....");
Object bean = applicationContext.getBean("person");
Object bean2 = applicationContext.getBean("person");
System.out.println(bean == bean2);
}
图片.png
2、@Scope(“prototype”)多实例的
<bean id="person" class="com.atguigu.bean.Person" scope="prototype" >
<property name="age" value="18"></property>
<property name="name" value="zhangsan"></property>
</bean>
@Configuration
public class MainConfig2 {
/**
* @Scope:调整作用域
* 默认是单实例的
* singleton:单实例的(默认值):ioc容器启动会调用方法创建对象放到ioc容器中。
* 以后每次获取就是直接从容器(map.get())中拿,
* prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中。
* 每次获取的时候才会调用方法创建对象;
*/
@Scope("prototype")
@Bean("person")
public Person person() {
System.out.println("给容器中添加Person....");
return new Person("张三", 25);
}
}
图片.png