`

spring中Bean的创建方式

阅读更多

        在spring中Bean创建有三种方式.

  1. 直接通过spring调用相对应的构造函数创建对象
  2. 静态的工厂方法
  3. 实例的工厂方法

第一种是我们最常用的方式,这里就不论述了.主要说明下静态的工厂方法和实例的工厂方法如何配置。

package mislay;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		TestBean bean1 = (TestBean) context.getBean("testBean1");
		bean1.sayHello();
		
		TestBean bean2 = (TestBean) context.getBean("testBean2");
		bean2.sayHello();

		TestBean bean3 = (TestBean) context.getBean("testBean3");
		bean3.sayHello();
	}
}



 

package mislay;

public class TestBean {
	private TestBean(String hello) {
		this.s = hello;
	}
	
	public static TestBean newInstance(String hello) {
		return new TestBean(hello); 
	}
	
	public static TestBean newInstance() {
		return new TestBean("hello"); 
	}
	
	private String s;
	public void sayHello() {
		System.out.println(s);
	}
}

 

package mislay;

public class TestBeanFactory {
	public TestBean getTestBean() {
		return TestBean.newInstance("大家好");
	}
	
	public static TestBean getTestBeanByStaticMethod() {
		return TestBean.newInstance("再一次大家好");
	}
}

 

<?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.0.xsd">

	<bean id="testBean1" class="mislay.TestBean" factory-method="newInstance" />
	
	<bean id="testBean2" class="mislay.TestBean" factory-bean="helloBeanFactory1" factory-method="getTestBean" />
	<bean id="helloBeanFactory1" class="mislay.TestBeanFactory"></bean>
	
	<bean id="testBean3" class="mislay.TestBeanFactory" factory-method="getTestBeanByStaticMethod"></bean>
</beans>

 

代码很简单,静态的工厂方法分别在TestBean和TestBeanFactory中各一个.其中TestBeanFactory中还有一个实例的工厂方法.所有的工厂方法都返回一个TestBean实例.

 

注意在spring配置文件中id为testBean1何testBean3都利用了静态工厂方法.而testBean2则是利用了实例工厂方法。从这几个配置中不难看出:

  •  factory-method针对的是方法名,如果factory-bean属性没有出现,那么则是利用的class属性配置的类的静态方法
  • 如果factory-method和factory-bean同时出现,那么则是利用的这个class属性配置的类的实例方法
  • 不管是实例方法和静态方法都共同有个缺点:不能带参数

对于实例工厂方法不能传参的问题可以通过配置不同实例,注入不同的参数,然后引用所需要的实例接达到目的。但是静态工厂方法就无能为力了。

分享到:
评论

相关推荐

    Spring Bean创建初始化流程.docx

    以下是对Spring Bean创建初始化流程的详细解释: 1. **初始化ApplicationContext**: 开始时,通过`AnnotationConfigApplicationContext`类创建一个上下文实例,通常传入一个或多个配置类(`annotatedClasses`),...

    详解Spring 中如何控制2个bean中的初始化顺序

    Spring 中的 DependsOn 注解可以保证被依赖的 bean 先于当前 bean 被容器创建。例如,在 B 上加上注解 @DependsOn({"a"}),这样可以保证 A 先于 B 被初始化。 需要注意的是,bean 属性的注入是在初始化方法调用之前...

    spring创建bean简单示例

    本示例将深入探讨如何在Spring中创建和管理Bean。首先,我们需要理解Spring的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)原理,这两个概念是Spring框架的核心。 **控制反转(IoC...

    Spring定义bean的三种方式和自动注入

    在Spring框架中,管理Bean的方式主要有三种:XML配置、注解配置和Java配置。下面将详细介绍这三种方式以及Spring的自动注入机制。 1. **基于XML的Bean定义**: 在XML配置中,我们通常在`applicationContext.xml`...

    详解Spring中Bean的生命周期和作用域及实现方式

    Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...

    spring bean XML配置入门

    在Spring中,一个Bean通常代表应用中的一个对象,这些对象由Spring容器创建、管理并提供给其他组件使用。Spring容器通过XML配置文件或注解来定义Bean及其相互关系。 3. **XML配置文件**: "spring-beans"是Spring...

    spring bean的生命周期

    - **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...

    粗略实现spring创建bean

    - 切面自动代理:Spring能够自动为Bean创建代理,以便在方法调用前后执行额外逻辑。 6. Spring Bean 的装配 - 自动装配:通过`@Autowired`注解自动寻找匹配类型的Bean进行装配。 - 配置文件指定:在XML配置文件...

    spring中的bean

    在Spring中,Bean通常代表应用程序中的一个对象,这些对象由Spring容器(ApplicationContext)管理,包括创建、初始化、装配和销毁。Bean可以通过XML配置文件、注解或者Java配置类进行定义。 1. **Bean的定义**:在...

    Spring Bean重复执行两次(实例被构造两次)问题分析

    但如果这些定义分布在不同的配置文件中,或者通过编程方式动态添加,就可能导致容器内出现两个相同的Bean实例。 2. **@Autowired注解的误用**:Spring的自动装配机制可能导致Bean的多次实例化。如果一个BeanA依赖于...

    Spring的Bean配置

    在本文中,我们将深入探讨Spring中的Bean配置,包括IoC和DI的概念,Bean的配置方式,以及不同类型的IOC容器。 **Spring的Bean配置**: 在Spring中,Bean是应用中的对象,它们由Spring IoC容器负责创建、管理和装配...

    spring运行过程中动态注册bean

    在Spring框架中,动态注册Bean是一项非常实用的功能,它允许我们在应用运行时向Spring容器添加新的Bean定义。这种能力在很多场景下都是极其有用的,比如根据不同的环境配置加载不同的服务实现,或者在运行时根据某些...

    线程中获取spring 注解bean

    当需要在线程中获取Spring注解的bean时,有几种常见的方法: 1. **ThreadLocal**:Spring提供了一种名为`ThreadLocalTargetSource`的特殊`TargetSource`实现,可以将bean实例绑定到当前线程。这样,每个线程都有其...

    Spring框架中Bean的生命周期 Spring中Bean有几种作用域

    在Spring框架中,Bean的生命周期管理和作用域是其核心特性之一,它们对于理解Spring如何管理对象的创建、初始化、使用以及销毁至关重要。首先,我们来深入探讨Bean的生命周期。 Spring中的Bean生命周期主要分为两个...

    创建SpringBean配置工具类

    创建SpringBean配置工具类(安全)如: &lt;bean id=... scope="prototype"&gt;&lt;/bean&gt;

    自定义注解得使用,模拟spring通过注解方式创建bean实例

    总结一下,自定义注解和基于注解的bean创建是Spring框架中强大的特性,它允许我们以声明式的方式定义和管理bean。通过创建自定义注解和相应的处理器,我们可以模拟Spring的行为,为应用程序提供高度定制化的bean管理...

    spring动态向容器中添加bean和删除指定bean.md

    spring动态向容器中添加bean和删除指定bean,不需要重启应用

    Java中Spring获取bean方法小结

    这里我们将详细探讨如何在Java中通过Spring获取配置的bean。 1. **BeanFactory与ApplicationContext** - **BeanFactory** 是Spring中最基础的IoC容器,负责管理和实例化Bean。它允许开发者定义Bean的生命周期和...

    Spring框架bean工具,在多线程环境下手动创建bean

    一个Spring框架的bean工具,可以在多线程环境下手动创建bean。使用时请注意在spring配置文件下加入&lt;bean id="springBeanUtils" class="com.hujin.common.util.SpringBeanUtils"/&gt;

    Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)

    在Spring框架中,Bean的生命周期管理和ApplicationContext的应用是两个核心概念,它们对于理解Spring如何管理和协调应用中的对象至关重要。本文将深入探讨这两个主题,并结合国际化(i18n)和事件传递来阐述它们在...

Global site tag (gtag.js) - Google Analytics