在spring中Bean创建有三种方式.
- 直接通过spring调用相对应的构造函数创建对象
- 静态的工厂方法
- 实例的工厂方法
第一种是我们最常用的方式,这里就不论述了.主要说明下静态的工厂方法和实例的工厂方法如何配置。
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创建初始化流程的详细解释: 1. **初始化ApplicationContext**: 开始时,通过`AnnotationConfigApplicationContext`类创建一个上下文实例,通常传入一个或多个配置类(`annotatedClasses`),...
Spring 中的 DependsOn 注解可以保证被依赖的 bean 先于当前 bean 被容器创建。例如,在 B 上加上注解 @DependsOn({"a"}),这样可以保证 A 先于 B 被初始化。 需要注意的是,bean 属性的注入是在初始化方法调用之前...
本示例将深入探讨如何在Spring中创建和管理Bean。首先,我们需要理解Spring的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)原理,这两个概念是Spring框架的核心。 **控制反转(IoC...
在Spring框架中,管理Bean的方式主要有三种:XML配置、注解配置和Java配置。下面将详细介绍这三种方式以及Spring的自动注入机制。 1. **基于XML的Bean定义**: 在XML配置中,我们通常在`applicationContext.xml`...
Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...
在Spring中,一个Bean通常代表应用中的一个对象,这些对象由Spring容器创建、管理并提供给其他组件使用。Spring容器通过XML配置文件或注解来定义Bean及其相互关系。 3. **XML配置文件**: "spring-beans"是Spring...
- **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...
- 切面自动代理:Spring能够自动为Bean创建代理,以便在方法调用前后执行额外逻辑。 6. Spring Bean 的装配 - 自动装配:通过`@Autowired`注解自动寻找匹配类型的Bean进行装配。 - 配置文件指定:在XML配置文件...
在Spring中,Bean通常代表应用程序中的一个对象,这些对象由Spring容器(ApplicationContext)管理,包括创建、初始化、装配和销毁。Bean可以通过XML配置文件、注解或者Java配置类进行定义。 1. **Bean的定义**:在...
在本文中,我们将深入探讨Spring中的Bean配置,包括IoC和DI的概念,Bean的配置方式,以及不同类型的IOC容器。 **Spring的Bean配置**: 在Spring中,Bean是应用中的对象,它们由Spring IoC容器负责创建、管理和装配...
在Spring框架中,动态注册Bean是一项非常实用的功能,它允许我们在应用运行时向Spring容器添加新的Bean定义。这种能力在很多场景下都是极其有用的,比如根据不同的环境配置加载不同的服务实现,或者在运行时根据某些...
当需要在线程中获取Spring注解的bean时,有几种常见的方法: 1. **ThreadLocal**:Spring提供了一种名为`ThreadLocalTargetSource`的特殊`TargetSource`实现,可以将bean实例绑定到当前线程。这样,每个线程都有其...
但如果这些定义分布在不同的配置文件中,或者通过编程方式动态添加,就可能导致容器内出现两个相同的Bean实例。 2. **@Autowired注解的误用**:Spring的自动装配机制可能导致Bean的多次实例化。如果一个BeanA依赖于...
在Spring框架中,Bean的生命周期管理和作用域是其核心特性之一,它们对于理解Spring如何管理对象的创建、初始化、使用以及销毁至关重要。首先,我们来深入探讨Bean的生命周期。 Spring中的Bean生命周期主要分为两个...
创建SpringBean配置工具类(安全)如: <bean id=... scope="prototype"></bean>
总结一下,自定义注解和基于注解的bean创建是Spring框架中强大的特性,它允许我们以声明式的方式定义和管理bean。通过创建自定义注解和相应的处理器,我们可以模拟Spring的行为,为应用程序提供高度定制化的bean管理...
spring动态向容器中添加bean和删除指定bean,不需要重启应用
这里我们将详细探讨如何在Java中通过Spring获取配置的bean。 1. **BeanFactory与ApplicationContext** - **BeanFactory** 是Spring中最基础的IoC容器,负责管理和实例化Bean。它允许开发者定义Bean的生命周期和...
一个Spring框架的bean工具,可以在多线程环境下手动创建bean。使用时请注意在spring配置文件下加入<bean id="springBeanUtils" class="com.hujin.common.util.SpringBeanUtils"/>
在Spring框架中,Bean的生命周期管理和ApplicationContext的应用是两个核心概念,它们对于理解Spring如何管理和协调应用中的对象至关重要。本文将深入探讨这两个主题,并结合国际化(i18n)和事件传递来阐述它们在...