标签:user 控制台 http 分布 prot system val play splay
默认情况下,Spring 只为每个在 IOC 容器里声明的 Bean 创建唯一 一个实例,并且整个 IOC 容器范围内都能共享该实例,所有后续的对象通过getBean() 调用和 Bean 的引用都将返回这个唯一的 Bean 实例。但是如果我们需要不同实例的Bean呢?这时就要提到Bean的作用域了,在Spring中默认的作用域为 Singleton,它是所有 Bean 的默认作用域。而在Spring 中提供了 5 种作用域,它会根据情况来决定是否生成新的对象,如下:
=====================================
我们可以通过XML<bean> 元素中的 scope 属性 或者 @Scope 注解 来设置,例如:
在上述五种作用域中,实际开发中 singleton 和 prototype 是最常用的两种,接下来将对这两种作用域进行详细讲解。
①、首先创建一个User类,代码如下:
/** * 用户实体类 */ public class User { private int userId; private String userName; private int userAge; private String userPwd; private String userAddress; //getter、setter省略...(这里就不要toString方法了,因为要打印对象的地址) }
②、在 Spring 的配置文件我们将 scope 属性的值设置为 prototype 多例模式,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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--创建一个User实例,作用域设置为prototype 多例模式--> <bean id="user" class="com.thr.pojo.User" scope="prototype"/> </beans>
③、测试代码,这里分别获取了三个User对象:
/** * 测试代码 */ public class SpringTest { public static void main(String[] args) { //1.初始化Spring容器,加载配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //2.通过容器获取实例 User user1 = applicationContext.getBean("user", User.class); User user2 = applicationContext.getBean("user", User.class); User user3 = applicationContext.getBean("user", User.class); //3.调用实例中的属性 System.out.println(user1); System.out.println(user2); System.out.println(user3); } }
④、运行测试代码,查看控制台打印的结果:
可以很明显的发现,这三个User对象的地址是不一样的,说明分别创建了三个不同的User对象。
①、首先创建一个User类,代码参考上面的。
②、创建PojoConfig类,用来启动容器和注册Bean对象:
/** * 启动容器和注册Bean对象 */ @ComponentScan(basePackages = "com.thr.pojo") @Configuration public class PojoConfig { public PojoConfig() { System.out.println("PojoConfig容器初始化成功..."); } //实例化User对象 @Bean(name = "user") //显示设置单例模式 @Scope(value = "singleton") public User user(){ return new User(); } }
③、测试代码,这里分别获取了三个User对象,注意这里需要使用AnnotationConfigApplicationContext类来获取:
/** * 测试代码 */ public class SpringTest1 { public static void main(String[] args) { //1.初始化Spring容器,通过注解加载 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(PojoConfig.class); //2.通过容器获取实例 User user1 = applicationContext.getBean("user", User.class); User user2 = applicationContext.getBean("user", User.class); User user3 = applicationContext.getBean("user", User.class); //3.调用实例中的属性 System.out.println(user1); System.out.println(user2); System.out.println(user3); } }
④、运行测试代码,查看控制台打印的结果:
由于注册 Bean 时Scope设置为 singleton 单例模式,所以创建的多个 User 肯定是同一个,可以发现结果是一样的。
标签:user 控制台 http 分布 prot system val play splay
原文地址:https://www.cnblogs.com/tanghaorong/p/14185723.html