Spring单例和多例

使用bean的scope属性来控制单例和多例:

    <!-- bean 的 scope属性可以控制单例和多例
        singleton是默认值:单例的 ;
        prototype:   多例的;
        request:  在web应用中每次请求重新实例化;
        session:  在web应用中每次会话重新实例化;
     -->
    <bean id="people" class="com.spring.pojo.People" scope="singleton"></bean>
    <bean id="people2" class="com.spring.pojo.People" scope="prototype"></bean>

 

测试代码:

复制代码
public class Test {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//        String[] beans = applicationContext.getBeanDefinitionNames();
//        System.out.println(Arrays.toString(beans));
        People people1 = applicationContext.getBean("people",People.class);
        People people2 = applicationContext.getBean("people",People.class);
        System.out.println(people1==people2);
        
        People people3 = applicationContext.getBean("people2",People.class);
        People people4 = applicationContext.getBean("people2",People.class);
        System.out.println(people3==people4);
    }
}
复制代码

控制台输出:

true
false

单例设计模式,懒汉式: 由于加了锁,所以效率低,于是产生了饿汉式

复制代码
//单例设计模式:懒汉式
public class Teacher {
    private static Teacher teacher;
    private Teacher() {}
    public static Teacher getInstance() {
        if(teacher==null) {
            //考考虑到多线程,双重判断
            synchronized(Teacher.class) {
                if(teacher==null) {
                    teacher=new Teacher();
                }
            }
        }
        return teacher;
    }
}
复制代码

单例设计模式,饿汉式:

复制代码
//单例设计模式:饿汉式
public class Teacher {
    //在对象实例化里就赋值
    private static Teacher teacher = new Teacher();
    private Teacher() {}
    public static Teacher getInstance() {
        return teacher;
    }
}
复制代码

 

posted @   caiJava  阅读(3069)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
阅读排行:
· 对象命名为何需要避免'-er'和'-or'后缀
· JDK 24 发布,新特性解读!
· .NET Core奇技淫巧之WinForm使用Python.NET并打包
· Java24你发任你发,我用Java8
· C# 中比较实用的关键字,基础高频面试题!
点击右上角即可分享
微信分享提示