spring bean的形式(3)

简介: spring bean的形式

一、spring bean的作用域分为以下五种:

1、singleton(默认模式):单例,指一个bean容器中只存在一份

2、prototype:每次请求(每次使用)创建新的实例,destroy方式不生效

3、request:每次http请求创建一个实例且仅在当前request内有效

4、session:同上,每次http请求创建,当前session中有效

5、global session:基于portlet的web中有效(portlet定义了global sessio),如果在web中,同session

二、配置bean的作用域

schema配置方式:

<!-- 设置bean的作用域scope属性值为prototype,默认为singleton,可以不设置scope属性 -->
<bean name="beanScope" class="com.jsun.test.springDemo.BeanScope" scope="prototype"></bean>

annotation注解方式:

<!-- 配置自动扫描 -->
<context:component-scan base-package="com.jsun.test"></context:component-scan>


//注册bean
@Component("beanScope") 
//设置bean的作用域范围为prototype
@Scope("prototype")  
public class BeanScope {

}

单元测试打印出bean的hashCode值进行验证:

    @Test
    public void testScope(){
        //singleton作用域两次输出结果一致,说明是同一个bean;
        //prototype两次输出结果不一致,说明不是同一个bean
        BeanScope beanScope = super.getBean("beanScope");
        System.out.println(beanScope.hashCode());

        BeanScope beanScope2 = super.getBean("beanScope");
        System.out.println(beanScope2.hashCode());
    }

三、使用注解的方式验证singleton单例在一个bean容器中只存在一份,以及实际应用举例

spring的xml文件配置自动扫描:

<context:component-scan base-package="com.jsun.test"></context:component-scan>

创建bean类,添加注解:

//注册bean
@Component("beanScope") 
//设置bean的作用域范围为singleton
@Scope("singleton")  
public class BeanScope {

单元测试加载spring容器,并运行test方法:

 @Before
    public void before(){
        //加载配置文件,创建spring容器,应用上下文
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");
        context.start();
    }

    @After
    public void after(){
        context.destroy();
    }

    @SuppressWarnings("unchecked")
    protected <T extends Object>T getBean(String beanId){
        return (T)context.getBean(beanId);
    }

    @Test
    public void testScope(){
        BeanScope beanScope = super.getBean("beanScope");
        System.out.println("testScope:"+beanScope.hashCode());
    }

    @Test
    public void testScope2(){
        BeanScope beanScope = super.getBean("beanScope");
        System.out.println("testScope2:"+beanScope.hashCode());

    }

从输出结果中,可以看出,两个test方法输出结果不一致,虽然配置bean的作用域为singleton,但是来个bean分属于不同的spring容器(每个test方法执行都会伴随加载spring容器、销毁容器),所以即使配置了bean的scope为singleton,两个bean也不是同一个bean。

作者:glowd
原文:https://blog.csdn.net/zengqiang1/article/details/54601111
版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
1114 26
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
2990 26
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
1427 4
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
572 12
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
693 12
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
934 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
380 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
623 6
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。