@Scope原型注解创建的Bean不同
来源:互联网 发布:mysql dns反向解析 编辑:程序博客网 时间:2024/06/01 22:13
Spring 定义了很多的作用域:
单例(Singleton):在整个应用中只创建一次。默认作用域。
原型(Prototype): 每次注入或者通过Spring应用上下文获取的时候,都会创建一个Bean的实例。
会话(session): Web应用中,为每个会话创建一个实例
请求(request): Web应用中,为每个请求创建一个实例。
---------------------------------------------------------------------单例-------------------------------------------------------------------------
下面通过一个简单的例子来说明,该例子集合了上次文章的JavaConfig的代码进行修改,懒得再重写了。
package JavaZhuangpeiBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import soudSystem.CDPlayer;
import soudSystem.CompactDisc;
import soudSystem.SgtPeppers;
@Configuration
public class CDPlayerConfig2 {
@Bean
@Scope("prototype")-------------------------------------------每次创建的SgtPeppers的对象不一样
public SgtPeppers sgtPeppers(){
return new SgtPeppers();
}
@Bean
public CDPlayer cdplayer(SgtPeppers compactDisc){ //通过构造器将SgtPeppers的对象
return new CDPlayer(compactDisc);
}
@Bean
public CDPlayer anothercdplayer(SgtPeppers compactDisc){
return new CDPlayer(compactDisc);
}
}
以下通过Junit测试,从Spring容器中取出来的SgtPeppers的对象是否是一样的,如果不一样,则说明@Scope(“Prototype”)注解在每次将一个Bean注入到Spring容器的时候都创建了一个新的实例。
JavaZhuangpeiBean;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import soudSystem.CDPlayer;
import soudSystem.CDPlayerConfig;
import soudSystem.CompactDisc;
import soudSystem.SgtPeppers;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig2.class)
public class CDPlayerConfig2Test {
@Autowired
private SgtPeppers compactDisc;
@Autowired
private CDPlayer cdplayer;
@Test
public void testCdplayer() {
System.out.println(compactDisc);
}
@Test
public void testAnothercdplayer() {
System.out.println(compactDisc);
}
}
运行结果:
soudSystem.SgtPeppers@6dc17b83
soudSystem.SgtPeppers@8dbdac1
总结:由结果可知,从Spring容器中取出来的对象实际是不一样的,因为在创建该对象的实例时就使用了@Scope("prototype")。
- @Scope原型注解创建的Bean不同
- springboot根据不同的条件创建bean,动态创建bean,@Conditional注解使用
- Spring 容器创建bean的scope
- spring boot 条件注解的使用@Conditional;@Conditional 可以根据条件,创建不同的bean,
- Bean的scope
- Spring Bean的Scope
- bean的scope属性
- bean的scope属性
- bean的scope属性
- spring bean的scope
- Spring Bean的Scope
- Spring Bean的scope
- spring bean的scope
- Spring Bean装配之基于Java的容器注解说明——@Bean和@Scope
- Spring的bean管理-注解创建对象
- 不同作用域(scope)的Spring Bean之间的依赖关系的动态代理注入
- Spring framework不同Scope的Bean注入时使用代理类的理解
- 2--spring bean 的作用域scope 设置;bean的初始化和销毁方法,profile配置不同环境实例化不同的bean,自定义事件,自定义监听器
- 特殊属性之:ref
- NSOperationQueue(多线程请求队列)
- 集成 SVN 插件到 EclipseNEON 全过程
- 关于不同cpu架构APP的兼容问题
- 课堂在线Java程序设计 铺砖问题
- @Scope原型注解创建的Bean不同
- 在 onCreate 和 onCreateView 中获取控件宽高的方法
- NOIP2017模拟赛(9) 总结
- win10环境下用dism+7-zip+ultraiso 制作winpe
- nodejs后台接收不到前台提交的用户信息
- 第5章 构建Spring Web 应用程序 --笔记1
- 《深入探索C++对象模型》第二章:构造函数语意学(下)
- jQuery插件----表单验证
- Java 8新特性终极指南