先看一下BeanFactory接口的三个子接口:
还是很清楚的
- ListableBeanFactory:提供访问容器中bean基本信息的方法
- AutowireCapableBeanFactory:定义了将容器中的bean按某种方式进行自动装配的方法
- HierarchicalBeanFactory:提供了访问父容器的方法,这样就使得spring具有父子级联的IOC容器
看一下BeanFactory定义的方法
在BeanFactory中的方法,很普通,但是需要特别注意的是isPrototype,isSingleton这两个方法,因为这涉及到Bean的作用域的概念。
在isSingleton方法注释中是这样描述的
写道
Is this bean a shared singleton? That is, will getBean always return the same instance?
Note: This method returning false does not clearly indicate independent instances. It indicates non-singleton instances, which may correspond to a scoped bean as well. Use the isPrototype operation to explicitly check for independent instances.
既然Spring在如此核心的BeanFactory中已经涉及到singleton等概念了,那顺便复习一下。
singleton模式,是设计模式中的一种,中文名为单例模式,顾名思义,单例模式在实例化一次后每次只返回原有的那一份。这在数据库连接,一些共享,无状态的对象上非常有用,避免了每次实例化带来的开销。
核心提示点:Spring下默认的bean均为singleton,可以通过singleton=“true|false” 或者 scope=“?”来指定
关于singleton的概念,可以通过以下的代码来大致表现出来(代码为网上搜索得来^_^):
public class HelloBean {
private String helloWorld;
private int i = (int) (100 * Math.random());
public HelloBean(String helloWorld) {
this.helloWorld = helloWorld;
}
public void sayHello() {
System.out.println(helloWorld);
System.out.println("输出随机整数: " + i);
}
}
<beans>
<bean id="singletonBean" class="javamxj.spring.basic.singleton.HelloBean">
<constructor-arg>
<value>Hello! 这是singletonBean!value>
</constructor-arg>
</ bean>
<bean id="prototypeBean" class="javamxj.spring.basic.singleton.HelloBean"
singleton="false">
<constructor-arg>
<value>Hello! 这是prototypeBean! value>
</constructor-arg>
</bean>
</beans>
public class Main {
public static void main(String[] args) {
Resource res = new ClassPathResource("javamxj/spring/basic/singleton/bean.xml");
BeanFactory factory = new XmlBeanFactory(res);
HelloBean h1 = (HelloBean) factory.getBean("singletonBean");
h1.sayHello();
HelloBean h2 = (HelloBean) factory.getBean("singletonBean");
h2.sayHello();
System.out.println("h1==h2: " + (h1==h2));
System.out.println("");
HelloBean h3 = (HelloBean) factory.getBean("prototypeBean");
h3.sayHello();
HelloBean h4 = (HelloBean) factory.getBean("prototypeBean");
h4.sayHello();
System.out.println("h3==h4: " + (h3==h4));
}
}
运行结果为:
Hello! 这是singletonBean!
输出随机整数: 7
Hello! 这是singletonBean!
输出随机整数: 7
h1==h2: true
Hello! 这是prototypeBean!
输出随机整数: 95
Hello! 这是prototypeBean!
输出随机整数: 60
h3==h4: false
核心提示:Spring通过某些机制,保证了在其容器下的bean默认均为singleton,也就是说使用者无需自己维护一个singleton方法。
除了singleton作用域外,spring还有prototype,request,session,globalSession几个作用域,这些我在其他文章中再写!
总结一下:
- BeanFactory本质是一个工厂,创建Bean的工厂(涉及到工厂模式)
- 部分设计模式在Spring中有着非常重要的应用
- 大小: 8.6 KB
- 大小: 9.3 KB
分享到:
相关推荐
BeanFactory是Spring中最基本的IOC容器接口,它负责管理Bean的生命周期,包括实例化、初始化、销毁等操作。在实际应用中,我们通常使用其子类ApplicationContext,它提供了更丰富的功能,如国际化支持、事件发布等。...
在Spring框架中,`Spring-Aware`接口是一个重要的概念,它允许我们与Spring的应用上下文(ApplicationContext...通过正确地配置和使用`Spring-Aware`接口以及理解Bean的作用域,可以有效地在这些模块间共享和协同工作。
4. **作用域管理**:支持单例(singleton)、原型(prototype)等多种bean的作用域。 5. **配置元数据**:可以读取XML、注解或基于Java的配置来管理bean。 三、BeanFactory与ApplicationContext的区别 虽然...
### Spring的BeanFactory的接口注解 #### 一、引言 在Spring框架中,`BeanFactory`是工厂模式的一种实现,它负责管理容器中的Bean的生命周期与依赖注入。了解`BeanFactory`及其相关接口的功能对于掌握Spring的核心...
Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...
在实际的Spring框架中,`BeanFactory`接口提供了许多方法,如`getBean()`用于获取bean,`containsBean()`检查是否存在特定bean等。 首先,我们要了解`BeanFactory`的工作流程。这个过程通常包括以下步骤: 1. **...
Spring还允许我们自定义Bean的作用域。默认情况下,Bean是单例(Singleton),但在`@Scope`注解的帮助下,我们可以创建原型(Prototype)、会话(Session)或请求(Request)作用域的Bean。 最后,`...
- **Spring Core Container**:包括了BeanFactory和ApplicationContext两个核心接口,它们是Spring IoC容器的基础。 - **BeanFactory**:是最基本的容器,提供了配置和管理bean的能力。 - **ApplicationContext**...
- Bean的生命周期和作用域 - XML与注解配置的区别与使用 - AOP的原理与应用 - Spring MVC的流程和配置 - 数据库连接池的配置和使用 - 事务管理的实现 - Spring Boot的快速开发特性 - Spring Security的基本配置和...
在Spring中,通过配置Bean的作用域为`prototype`可以实现原型模式。 5. **代理模式** - **应用场景**:Spring AOP中广泛使用了代理模式来实现切面编程。例如,`JdkDynamicAopProxy`和`Cglib2AopProxy`分别利用JDK...
在Spring中,Bean的管理包含多个方面:创建Bean实例、配置Bean属性、控制Bean的生命周期以及Bean作用域的定义。接下来将详细解释这些知识点。 1. Spring的工厂类: Spring通过工厂模式设计了一系列工厂类来创建对象...
它解析`<bean>`标签,从中提取出`class`属性(定义bean的实现类)、`parent`属性(定义父bean)、以及其他的属性,如`scope`(作用域)、`abstract`(是否为抽象bean)、`lazy-init`(是否延迟初始化)、`autowire`...
总的来说,可以初步理解BeanFactory 为 Spring 框架中负责管理 bean 对象的核心组件,它通过 IoC 容器、延迟加载、依赖注入和作用域管理等机制,实现了对象之间的解耦和灵活配置,从而提高了应用程序的可维护性、可...
BeanFactory是Spring的基础容器,它提供bean的实例化、作用域、依赖注入、生命周期管理等功能。ApplicationContext则是在BeanFactory基础上扩展,增加了更多企业级服务,如消息处理、国际化、应用事件等。 **Bean的...
Spring学习之路(黑马课程...Spring学习之路是指通过学习Spring框架来掌握IOC反转控制的关键技术,并且学习Bean的创建和管理、Bean的作用域、Bean的实例化方式、Bean的延迟加载、Bean的初始化函数和销毁函数等知识点。
##### 1.5 Bean作用域 - **1.5.1 单例作用域**: 默认情况下,每个Bean都是单例的,即在容器中只有一个实例。 - **1.5.2 原型作用域**: 对于每次请求都创建一个新的实例,适用于那些不希望共享的状态Bean。 - **...
- **Bean作用域**:Spring支持不同的Bean作用域,如singleton、prototype等。 - **自定义Bean**:如何创建和配置自定义Bean的方法。 - **Bean的继承**:Bean可以继承另一个Bean的配置。 - **容器扩展点**:提供...
但是,Spring 框架中不能解决非单例属性之外的循环依赖、构造器的循环依赖和prototype 作用域循环依赖。 在 Spring 框架中,Bean 的生命周期是一个重要的概念。Bean 的生命周期流程包括实例化、依赖注入、初始化、...
理解这一过程有助于我们优化应用的初始化性能,合理设计Bean的加载顺序,以及更好地处理不同作用域的Bean。 4. **MyBatis源码解析**:尽管"19-MyBatis源码—SQL操作执行流程源码深度剖析-徐庶"和"12-Spring之整合...