-
最基本的:
- <bean id="someBean" class="some.someBeanSimpleFactory"/>
<bean id="someBean" class="some.someBeanSimpleFactory"/>
- public class SomeBean{
-
public void excute(){
-
System.out.println("hi.");
- }
- }
public class SomeBean{
public void excute(){
System.out.println("hi.");
}
}
- 简单工厂方法:
- <bean id="someBean" class="some.someBeanSimpleFactory" factory-method="create"/>
<bean id="someBean" class="some.someBeanSimpleFactory" factory-method="create"/>
- public class SomeBeanSimpleFactory{
-
public static SomeBean create(){
-
new SomeBean();
- }
- }
public class SomeBeanSimpleFactory{
public static SomeBean create(){
new SomeBean();
}
}
注意static。
- 抽象工厂方法:
- <bean id="someBeanFactory" class="some.someBeanFactory"/>
-
<bean id="someBean" class="someBeanFactory" factory-method="create"/>
<bean id="someBeanFactory" class="some.someBeanFactory"/>
<bean id="someBean" class="someBeanFactory" factory-method="create"/>
- public class SomeBeanFactory{
-
public SomeBean create(){
-
new SomeBean();
- }
- }
public class SomeBeanFactory{
public SomeBean create(){
new SomeBean();
}
}
注意不是static方法。
这3种实例化Bean的方式都是
- ApplicationContext context=....;
-
SomeBean bean=(SomeBean)context.getBean("someBean");
ApplicationContext context=....;
SomeBean bean=(SomeBean)context.getBean("someBean");
p.s. id和name的不同
在xml文件中id是固有的属性,并且属性值是唯一的。name属性值在Spring的配置文件中也是唯一的,id和name的作用都是标识一个bean的。不同之处于,name属性值可以带有特殊字符,例如:name="ss/s"
3.2.3.2. 实例化bean
就Spring IoC容器而言,bean定义基本上描述了创建一个或多个实际bean对象的内容。当需要的时候,容器会从bean定义列表中取得一个指定的bean定义,并根据bean定义里面的配置元数据使用反射机制来创建一个实际的对象。因此这一节将讲解如何告知Spring IoC容器我们将要实例化的对象的类型以及如何实例化对象。
当采用XML描述配置元数据时,将通过<bean/>元素的class属性来指定实例化对象的类型。class 属性 (对应BeanDefinition实例的Class属性)通常是必须的(不过也有两种例外的情形,见第 3.2.3.2.3 节 “使用实例工厂方法实例化”和第 3.6 节 “bean定义的继承”)。class属性主要有两种用途:在大多数情况下,容器将直接通过反射调用指定类的构造器来创建bean(这有点等类似于在Java代码中使用new操作符);在极少数情况下,容器将调用类的静态工厂方法来创建bean实例,class属性将用来指定实际具有静态工厂方法的类(至于调用静态工厂方法创建的对象类型是当前class还是其他的class则无关紧要)。
3.2.3.2.1. 用构造器来实例化
当采用构造器来创建bean实例时,Spring对class并没有特殊的要求,我们通常使用的class都适用。也就是说,被创建的类并不需要实现任何特定的接口,或以特定的方式编码,只要指定bean的class属性即可。不过根据所采用的IoC类型,class可能需要一个默认的空构造器。
此外,IoC容器不仅限于管理JavaBean,它可以管理任意的类。不过大多数使用Spring的人喜欢使用实际的JavaBean(具有默认的(无参)构造器及setter和getter方法),但在容器中使用非bean形式(non-bean style)的类也是可以的。比如遗留系统中的连接池,很显然它与JavaBean规范不符,但Spring也能管理它。
当使用基于XML的元数据配置文件,可以这样来指定bean类:
<bean id="exampleBean" class="examples.ExampleBean"/>
<bean name="anotherExample" class="examples.ExampleBeanTwo"/>
给构造函数指定参数以及为bean实例设置属性将在随后的部份中谈及。
3.2.3.2.2. 使用 静态工厂方法实例化
当采用静态工厂方法创建bean时,除了需要指定class属性外,还需要通过factory-method属性来指定创建bean实例的工厂方法。Spring将调用此方法(其可选参数接下来介绍)返回实例对象,就此而言,跟通过普通构造器创建类实例没什么两样。
下面的bean定义展示了如何通过工厂方法来创建bean实例。注意,此定义并未指定返回对象的类型,仅指定该类包含的工厂方法。在此例中, createInstance()必须是一个static方法。
<bean id="exampleBean"
class="examples.ExampleBean2"
factory-method="createInstance"/>
给工厂方法指定参数以及为bean实例设置属性将在随后的部份中谈及。
3.2.3.2.3. 使用实例工厂方法实例化
与使用静态工厂方法实例化类似,用来进行实例化的实例工厂方法位于另外一个已有的bean中,容器将调用该bean的工厂方法来创建一个新的bean实例
为使用此机制,class属性必须为空,而factory-bean属性必须指定为当前(或其祖先)容器中包含工厂方法的bean的名称,而该工厂bean的工厂方法本身必须通过factory-method属性来设定(参看以下的例子)。
<!-- the factory bean, which contains a method called createInstance() -->
<bean id="myFactoryBean" class="...">
...
</bean>
<!-- the bean to be created via the factory bean -->
<bean id="exampleBean"
factory-bean="myFactoryBean"
factory-method="createInstance"/>
虽然设置bean属性的机制仍然在这里被提及,但隐式的做法是由工厂bean自己来管理以及通过依赖注入(DI)来进行配置。
3.2.4. 使用容器
从本质上讲,BeanFactory仅仅只是一个维护bean定义以及相互依赖关系的高级工厂接口。通过BeanFactory我们可以访问bean定义。下面的例子创建了一个bean工厂,此工厂将从xml文件中读取bean定义:
InputStream is = new FileInputStream("beans.xml");
BeanFactory factory = new XmlBeanFactory(is);
基本上就这些了,接着使用getBean(String)方法就可以取得bean的实例;BeanFactory提供的方法极其简单。它仅提供了六种方法供客户代码调用:
boolean containsBean(String):如果BeanFactory包含给定名称的bean定义(或bean实例),则返回true
Object getBean(String):返回以给定名字注册的bean实例。根据bean的配置情况,如果为singleton模式将返回一个共享的实例,否则将返回一个新建的实例。如果没有找到指定的bean,该方法可能会抛出BeansException异常(实际上将抛出NoSuchBeanDefinitionException异常),在对bean进行实例化和预处理时也可能抛出异常
Object getBean(String, Class):返回以给定名称注册的bean实例,并转换为给定class类型的实例,如果转换失败,相应的异常(BeanNotOfRequiredTypeException)将被抛出。上面的getBean(String)方法也适用该规则。
Class getType(String name):返回给定名称的bean的Class。如果没有找到指定的bean实例,则抛出NoSuchBeanDefinitionException异常。
boolean isSingleton(String):判断给定名称的bean定义(或bean实例)是否为singleton模式(singleton将在bean的作用域中讨论),如果bean没找到,则抛出NoSuchBeanDefinitionException异常。
String[] getAliases(String):返回给定bean名称的所有别名。
分享到:
相关推荐
除了这些基本的Bean配置,Spring还提供了许多高级功能,如Prototype作用域(每次请求创建新的Bean实例)、Lazy初始化(只有在实际使用时才初始化Bean)、FactoryBean(用于自定义Bean的创建逻辑)等。此外,Bean后...
在本文中,我们将深入探讨Spring框架中的Bean XML配置,这是Spring的核心特性之一,它允许我们定义、管理和装配应用中的对象。我们将围绕以下知识点展开: 1. **Spring框架基础**: Spring是一个开源的Java平台,...
- 三种实例化Bean的方式: - 使用类构造器实例化:这是最简单的实例化方式,Spring将调用无参构造器创建Bean的实例。 - 使用静态工厂方法实例化:这种方式通过调用一个静态方法来获取Bean实例,适用于简单工厂模式...
通过这些知识点,我们可以了解到Spring框架如何管理Bean,以及如何利用其强大的功能简化我们的开发工作。在实际项目中,理解并熟练掌握Spring Bean的创建和管理对于提升代码质量和可维护性至关重要。
知识点六:Bean的生命周期管理是Spring框架提供的另一个重要功能。Spring容器在创建、初始化和销毁Bean的过程中提供了一系列回调接口,允许开发者在Bean的不同生命周期阶段执行特定的操作。例如,实现...
在Spring框架中,Bean的管理是其核心特性之一,它涉及到Bean的创建、初始化、装配以及销毁等整个生命周期过程。本课件主要涵盖了以下几个关键知识点: 1. **控制反转(IoC)和依赖注入(DI)**:Spring的核心设计...
在Spring框架中,Bean管理是核心功能之一,它允许开发者通过声明式的方式配置和管理对象。这个压缩包文件“spring管理bean应用实例代码”显然包含了关于如何在Spring中配置和使用Bean的示例代码。接下来,我们将深入...
接下来,我们将通过一个简单的步骤来展示如何在Spring中创建Bean: 1. **定义Bean的类**: 首先,创建一个Java类,例如`MyService`,它代表一个Bean。这个类可能包含一些业务逻辑。 ```java public class ...
在Spring框架中,Bean的加载顺序是一个重要的概念,它涉及到Spring容器如何管理和初始化Bean的过程。在"spring的bean加载顺序样例项目"中,我们可以通过分析和实验来深入理解这一主题。下面将详细阐述Spring Bean的...
- 这些题目可能涵盖上述知识点,例如 BeanDefinition 的重要性,如何命名和管理 Bean,以及生命周期方法的使用等。 掌握 Spring Bean 的基础是理解 Spring 框架的关键,这涉及到 Bean 的定义、管理、装配和生命...
通过理解并熟练运用上述知识点,可以更高效地开发Spring Boot应用。博客"17. Spring Boot普通类调用bean【从零开始学Spring Boot】"可能涵盖了这些内容的实践示例和详细解释,建议读者详细阅读以加深理解。
Spring Bean 对象实例化实现过程图解...Spring Bean 对象实例化实现过程图解是一个复杂的过程,需要了解 BeanDefinitionRegistryPostProcessor 接口、BeanPostProcessor 的注册、getSingleton 方法、createBean 方法和 ...
在Spring框架中,Bean加载是核心功能之一,它关乎到整个应用的生命周期管理和依赖注入。Spring通过XML配置、注解配置或Java配置三种方式来定义Bean,并进行加载。接下来,我们将详细探讨Spring Bean加载的过程及其...
5. **Bean的实例化方式**:Spring支持三种实例化Bean的方式:通过构造器、工厂方法和静态工厂方法。每种方式都有其特定的使用场景。 6. **Bean的作用域**:Spring支持singleton(单例)、prototype(原型)、...
在本文中,我们将深入探讨Spring框架的一些核心知识点,以帮助开发者更好地理解和应用这一强大的工具。 1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,它允许组件之间的依赖关系在运行时被...
它从配置文件或注解中读取Bean定义,并根据这些定义实例化Bean。 3. **AOP(面向切面编程)**:Spring的AOP模块支持声明式事务管理、日志记录、性能监控等。切面是包含关注点的模块化单元,可以将横切关注点如事务...
在"tutorialspoint_spring-master"这个压缩包中,可能包含了Spring框架的各种示例代码,涵盖了上述知识点的实践应用。通过学习和运行这些示例,你可以更好地理解Spring如何工作,并能够将其应用到自己的项目中。这些...
3. **Spring实例化和配置** - **XML配置**: 传统上,Spring应用通过XML配置文件来定义bean及其依赖。 - **Annotation配置**: 使用注解(如@Service、@Repository、@Controller等)可以直接在类上声明bean和依赖。 ...
- **Prototype**:每次请求都会创建一个新的Bean实例,Spring只负责实例化,后续的生命周期由客户端代码控制。 8. **Bean的生命周期流程**: - 从实例化到销毁,Bean经历一系列步骤,包括设置属性、接口回调、...
在实例化Bean时,Spring会根据配置注入对应的参数。 3. Bean的实例化方式: - 类构造器注入:如上述,通过配置文件指定构造器参数。 - 静态工厂实例化:通过调用静态工厂方法创建Bean实例。 - 实例工厂实例化:...