@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

posted @ 2020-04-25 14:33  玄空2  阅读(483)  评论(0编辑  收藏  举报