Spring的三种实例化Bean的方式
1,xml配置使用bean的类构造器
2,xml配置+factory类,使用静态工厂方法实例化
3,xml配置+factory类,使用实例工厂方法实例化
以下分别说明
1,xml配置使用bean的类构造器
请参照前一篇文章《第一个Spring程序,HELLOWORLD》。
2,xml配置+factory类,使用静态工厂方法实例化
请参照以下代码中蓝字的部分,红字的部分为第三种方法所用。
xml文件配置
xml文件名:beans.xml
文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- the application context definition for the springapp DispatcherServlet -->
<bean id="sayhello" class="test.service.impl.HelloBean"/>
<bean id="sayhello2" class="test.service.impl.HelloBeanFactory" factory-method="createHelloBean"/>
<bean id="factory" class="test.service.impl.HelloBeanInstanceFactory"/>
<bean id="sayhello3" factory-bean="factory" factory-method="createHelloBean"/>
</beans>
工厂java文件
文件名:HelloBeanFactory.java
文件内容:
package test.service.impl;
import test.service.Hello;
public class HelloBeanFactory {
public static Hello createHelloBean() {
return new HelloBean();
}
}
bean接口文件
文件名:Hello.java
文件内容:
package test.service;
public interface Hello {
public void sayHello();
public void sayHello2();
public void sayHello3();
}
bean实现文件
文件名:HelloBean.java
文件内容:
package test.service.impl;
import test.service.Hello;
public class HelloBean implements Hello {
public void sayHello() {
System.out.println("这是一个测试程序");
}
@Override
public void sayHello2() {
System.out.println("这是一个测试程序,测试静态工厂创建bean");
}
@Override
public void sayHello3() {
System.out.println("这是一个测试程序,测试实例工厂创建bean");
}
}
3,xml配置+factory类,使用实例工厂方法实例化
xml文件配置
xml文件名:beans.xml
文件内容:参照方法2中的红字部分
工厂java文件
文件名:HelloBeanInstanceFactory.java
文件内容:
package test.service.impl;
import test.service.Hello;
public class HelloBeanInstanceFactory {
public Hello createHelloBean() {
return new HelloBean();
}
}
bean接口文件
文件名:Hello.java
文件内容:参照方法2中的红字部分
bean实现文件
文件名:HelloBean.java
文件内容:参照方法2中的红字部分
好,最后测试文件
文件名:FirstSpring.java
文件内容:
package test.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import test.service.Hello;
public class FirstSpring {
public static void main(String[] args) {
testHello();
testHelloForStaticFactory();
testHelloForInstanceFactory();
}
public static void testHello() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
Hello hello =(Hello) applicationContext.getBean("sayhello");
hello.sayHello();
}
public static void testHelloForStaticFactory() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
Hello hello =(Hello) applicationContext.getBean("sayhello2");
hello.sayHello2();
}
public static void testHelloForInstanceFactory() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
Hello hello =(Hello) applicationContext.getBean("sayhello3");
hello.sayHello3();
}
}
都写完了,来执行一下,结果输出:
这是一个测试程序
这是一个测试程序,测试静态工厂创建bean
这是一个测试程序,测试实例工厂创建bean
总结一下:
三种方法的用处,
第一种方法,通过bean的缺省构造函数创建,当各个bean的业务逻辑相互比较独立的时候或者和外界关联较少的时候可以使用。
第二种方法,利用静态factory方法创建,可以统一管理各个bean的创建,如各个bean在创建之前需要相同的初始化处理,则可用这个factory方法险进行统一的处理等等。
第三种方法,利用实例化factory方法创建,即将factory方法也作为了业务bean来控制,觉得1可用于集成其他框架的bean创建管理方法,2能够使bean和factory的角色互换。
本文出自 “点点滴滴” 博客,请务必保留此出处http://kin111.blog.51cto.com/738881/171032
分享到:
相关推荐
这里,我们主要探讨的是Spring如何通过其IoC(Inversion of Control)容器来实例化Bean,并理解其背后的逻辑。 首先,我们要知道Spring IoC容器是通过XML配置文件、注解或Java配置类来管理Bean的生命周期。Bean的...
### Spring 实例化Bean的三种方式详解 在Java企业级应用开发中,Spring框架因其强大的功能和灵活性,成为了处理依赖注入、事务管理等任务的首选工具。其中,Bean的实例化是Spring框架的核心功能之一,它支持多种...
在Spring框架中,实例化Bean是管理对象生命周期的关键部分。Spring提供了多种方式来创建和管理Bean,这使得我们可以根据项目需求灵活选择最佳实践。本文将详细介绍Spring中的三种主要的Bean实例化方式:XML配置、...
在这个例子中,`MyFactory`类需要有一个名为`createBean`的公共方法,Spring容器将调用这个方法来实例化`exampleBean`。 2. **静态工厂方法** 静态工厂方法与实例工厂方法类似,区别在于它不依赖于工厂类的实例,...
在Spring框架中,Bean的实例化是核心概念之一,它涉及到如何管理和控制应用程序中的对象生命周期。本篇文章将深入探讨Spring项目中Bean的实例化过程,包括三种主要的bean实例化方式:构造方法、静态工厂和实例工厂。...
如果一个BeanA依赖于另一个BeanB,同时BeanB也依赖于BeanA,那么Spring在处理依赖关系时可能会陷入循环引用,导致两个Bean都实例化两次。 3. **@PostConstruct与初始化回调**:Spring允许我们在Bean初始化后执行...
在预实例化过程中,`getBean(beanName)`被调用,这是`AbstractBeanFactory`类中的一个方法,用于从Bean工厂中获取指定名称的Bean实例。 6. **实际获取Bean**: 进入`doGetBean()`方法,这是Bean实例化的关键步骤...
Spring Bean 实例化是 Spring 框架中一个非常重要的概念,它直接关系到 Bean 的生命周期和管理。在 Spring 框架中,Bean 的实例化是通过容器来管理的,容器会根据配置文件中的信息来实例化 Bean。下面我们将详细介绍...
- **工厂方法**:可以定义一个静态或非静态工厂方法,Spring调用这个方法来实例化bean。 3. **依赖注入(DI)** Spring的依赖注入允许bean之间通过接口而非具体实现进行耦合,提高了代码的可测试性和可维护性。...
在Spring中,一个Bean通常代表应用中的一个对象,这些对象由Spring容器创建、管理并提供给其他组件使用。Spring容器通过XML配置文件或注解来定义Bean及其相互关系。 3. **XML配置文件**: "spring-beans"是Spring...
这种方法需要创建一个静态工厂类,该类提供一个静态方法用于实例化Bean。在上面的示例代码中,我们定义了一个HelloWorldFactory类,它提供了一个静态方法getInstance(),用于实例化HelloWorld对象。然后,在...
在Spring中配置一个bean为延迟实例化非常简单,只需要在`<bean>`元素中添加`lazy-init`属性并设置其值为`true`即可。例如: ```xml <bean id="lazyBean" class="com.example.LazyBean" lazy-init="true"> <!-- ...
- **实例化**:Spring通过`Class.forName()`或`new`关键字实例化Bean。如果在XML配置中指定了`class`属性,Spring将根据该属性创建Bean。 - **属性注入**:Spring会将依赖注入到Bean中,包括值注入(value,ref)...
在 Spring 框架中,Bean 的生命周期是一个重要的概念。Bean 的生命周期流程包括实例化、依赖注入、初始化、使用、销毁等阶段。在 Bean 的生命周期中,我们需要了解 Bean 的生命周期案例,以便更好地理解 Bean 的生命...
在Spring框架中,Bean的实例化是其核心功能之一,用于管理对象的生命周期和依赖关系。本文将详细探讨Spring中bean实例化的三种主要方式:普通构造方法创建、静态工厂创建和实例工厂创建。 1. 普通构造方法创建: 这...
今天我们将详细介绍Spring实例化bean的过程,并提供一个完整的代码示例,以便更好地理解这个过程。 第一步:调用Bean的默认构造方法 在实例化bean时,Spring首先会调用Bean的默认构造方法(当然也可以是指定的其它...
接下来,Spring使用Java的反射机制来实例化Bean。反射允许程序在运行时动态地获取类的信息(如类名、方法名等)并调用它们。在上述例子中,Spring会创建一个`MyClass`的实例,并根据`property`标签设置相应的属性值...
Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了Bean的生命周期和作用域的管理方式。 一、...
静态实例化是Spring框架中的一个重要特性,它可以帮助开发者更好地管理Bean实例的生命周期,提高程序的稳定性和性能。无论是通过XML配置还是Java配置,Spring都提供了丰富的工具和技术来支持静态实例化的实现。对于...
在Spring框架中,我们可以使用多种方式来初始化Bean,下面我们将介绍两种常见的方式: 1、使用@Bean的initMethod 在使用@Bean注解时,我们可以使用initMethod属性来指定Bean的初始化方法。例如: ```java @Bean...