@Bean的Scope示例
配置Bean的作用域对象
在不指定@Scope的情况下,所有bean都是单例的,且是饿汉式加载(容器启动时就加载)
@Lazy可以让其变为懒加载
在指定@Scope为prototype表示为多实例,且是懒汉式加载。
即IOC容器启动的时候,并不创建对象,而是第一次使用的时候才会创建。
@Scope为prototype示例
1、测试bean的实体
package com.bean;
/**
* @auto dh
* @create 2020-04-25-11:00
*/
public class Person {
private String name;
private int age;
public Person() {
System.out.println("person构造器----");
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2、配置类信息
package com.configuration;
import com.bean.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
/**
* @auto dh
* @create 2020-04-25-14:20
*/
//表明此类为配置类
@Configuration
public class SpringConfig002 {
@Bean
@Scope("prototype")
public Person person(){
return new Person();
}
}
3、测试类package com.test;
import com.bean.Person;
import com.configuration.SpringConfig002;
import com.sun.org.apache.xerces.internal.dom.PSVIAttrNSImpl;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* @auto dh
* @create 2020-04-25-14:21
*/
public class Test002 {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx=new AnnotationConfigApplicationContext(SpringConfig002.class);
Person p=(Person)ctx.getBean("person");
Person p1=(Person)ctx.getBean("person");
System.out.println(p1==p);
}
}
测试结果
person构造器----
person构造器----
false