您现在的位置是:网站首页>javajava

Spring中的Bean的作用域

deling2019年7月31日java251人已围观

简介Spring中的Bean的作用域

bean的作用域

当在Spring中定义一个bean时,你需要声明bean的作用域的选项

1、为了强制Spring在每次需要产生一个新的bean的实例,你应该把bean的作用域声明为prototype

2、为了强制Spring再每次需要时,都要产生同一个bean的实例,你应该把bean的作用域声明为singleton。Bean以单例的方式存在的。

Spring中支持的五种作用域分别为singleton、prototype、request、session和global session

例如:

singleton 作用域:

singleton 是默认的作用域,也就是说,当定义 Bean 时,如果没有指定作用域配置项,则 Bean 的作用域被默认为 singleton。

pojo中的java

Student文件内容

package cn.delingw.Pojo;
        public class Student {
	    private String name;	
	    public void setName(String name) {
		this.name = name;
	}	
	public void getName() {		
	    System.out.println("name:" + name);
	}
}

Beans.xml文件内容

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	default-init-method="init" default-destroy-method="destroy"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
	<context:annotation-config />
	
	<bean id="student" class="cn.delingw.Pojo.Student"
		scope="singleton">
	</bean></beans>

Test.java文件内容

package cn.delingw.Test;
import cn.delingw.Pojo.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
		Student student = (Student) context.getBean("student");
		student.setName("张三");
		student.getName();
		Student student11 = (Student) context.getBean("student");
		student11.getName();
	}
}

结果:

name:张三
name:张三

prototype 作用域

Prototype是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象。

student.java文件

package cn.delingw.Pojo;
public class Student {
	private String name;	
	    public void setName(String name) {
		this.name = name;
	}	
	public void getName() {		
	    System.out.println("name:" + name);
	}
}

Beans.xml文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	default-init-method="init" default-destroy-method="destroy"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
	<context:annotation-config />
	<bean id="student" class="cn.delingw.Pojo.Student"
		scope="prototype">
	</bean></beans>

test.java文件

package cn.delingw.Test;
import cn.delingw.Pojo.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
		Student student = (Student) context.getBean("student");
		student.setName("张三");
		student.getName();
		Student student11 = (Student) context.getBean("student");
		student11.getName();
	}
}

结果:

name:张三
name:null

建议: 对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。


Tags: spring

很赞哦! (6)

上一篇:spring中的IOC

下一篇:spring使用外部文件

留言

来说点儿什么吧...

您的姓名: *

选择头像: *

留言内容:

    2019年2月25日 13:35嘿嘿

    2019年2月26日 13:20ok

    可以可以!

    2019年3月18日 09:2311

    1

    2019年3月28日 09:24www.ikeguang.com

    可以可以

    2019年5月29日 18:47qwe

    666

    2019年5月30日 16:52BlankYk

    he,tui~

    2019年5月30日 17:04123

    321

    2019年6月26日 10:02周树人

    厉害厉害

    2019年6月26日 10:34sdlakrj

    sdaag

    2019年6月29日 15:31sdagafdbaf

    dgafdgdfh

    站长回复:你这是什么什么高级语言,我表示看不懂哈哈

    2019年7月6日 16:37啦啦

    写的真好!谢谢博主

    站长回复:谢谢!

    2019年8月14日 12:35傻傻

    厉害 小林

    2019年9月11日 20:05sdfw

    fgbhjksdgjdfhag

    2019年9月11日 22:18baba

    keke tui

    2019年11月5日 20:09666

    666