如何将Spring6工厂设计模式与Bean实例化方式结合为一个?
摘要:bean的作用域 ioc容器默认bean是单例的(singleton)。 bean对象的创建是在初始化上下文的时候就创建了,每一次调用getBean()时,都返回那个单例对象。这行代码会创建配置里面的bean对象 Applicati
bean的作用域
ioc容器默认bean是单例的(singleton)。
bean对象的创建是在初始化上下文的时候就创建了,每一次调用getBean()时,都返回那个单例对象。
// 这行代码会创建配置里面的bean对象
ApplicationContext context = new FileSystemXmlApplicationContext("D:/applicationContext.xml");
那如何把bean设置成多例的?
<!-- scope="prototype" 会使这个bean变成多例的-->
<bean id="sb" class="com.ali.bean.SpringBean" scope="prototype"/>
// 由于这个bean是多例模式,这行代码不会创建bean对象。而是在调用getBean()时创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml","spring-dao.xml");
// 这行代码才会创建bean对象
Object user= context.getBean("sb");
<!-- scope="prototype" 会使这个bean变成多例的
目前scope有2个值:singleton 和 prototype
当项目引入spring-webmvc依赖变成web项目时,scope会多2个属性
request:表示每次http请求都会创建一个新的bean对象
session: 表示每次 session都会创建一个新的bean对象
-->
<bean id="sb" class="com.ali.bean.SpringBean" scope="prototype"/>
自定义scope
自定义Scope(实现Scope接口)
spring内置了线程范围类: org.springframework.context.support.SimpleThreadScope
添加配置信息
<bean id="sb" class="com.ali.bean.SpringBean" scope="threadScope"/>
<!-- 配置自定义的作用域,实现一个线程一个bean-->
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer" >
<property name="scopes">
<map>
<entry key="threadScope">
<!-- 这个SimpleThreadScope 是spring框架内置的,也可以自定义-->
<bean class="org.springframework.context.support.SimpleThreadScope"></bean>
</entry>
</map>
</property>
</bean>
GoF之工厂模式
工厂模式的三种形态
简单工厂模式(Simple Factory):又叫静态工厂方法模式。是工厂方法模式的一种特殊实现。
工厂方法模式 (Factory Method)
抽象工厂模式 (Abstract Factory)
简单工厂模式
简单工厂模式包括三个角色:抽象产品、具体产品、工厂类。
