spring 工厂模式解耦的升级版(多例转单例)

  我们在表现层敲一个循环,打印一下用beanfactory生产的对象

spring 工厂模式解耦的升级版(多例转单例)

   我们可以看见,此时的对象是多例,多例就是有多个对象实例

spring 工厂模式解耦的升级版(多例转单例)

  我们在AccountServiceImpl中加一个成员变量,并做一点操作

spring 工厂模式解耦的升级版(多例转单例)

  然后我们在表现层调用as对象的保存账户方法,可以看到每个对象都是独立的,i的值没有累加

spring 工厂模式解耦的升级版(多例转单例)

   我们看beanfactory,因为使用了newInstance方法,因此每次都会调用对象的默认构造方法

spring 工厂模式解耦的升级版(多例转单例)

  于是我们需要对factory进行改造,使生产的对象变成单例,我们需要做到每次只newInstance一次,如果不存起来,jvm的垃圾回收机制会清理掉。

  我们定义一个map容器,用于存放我们的bean对象

spring 工厂模式解耦的升级版(多例转单例)

   然后我们在静态代码块里,我们初始化每个bean

spring 工厂模式解耦的升级版(多例转单例)

   然后我们可以改造getBean方法

spring 工厂模式解耦的升级版(多例转单例)

   然后我们运行一下,可以看到执行的是同一个对象

spring 工厂模式解耦的升级版(多例转单例)

 

 

 

 

  

 

上一篇:jasypt 加密解密+自定义加密算法


下一篇:Java中创建对象的5种方式