1、静态工厂DependencyInjectByStaticFactory类:
package com.spring.factory; import com.spring.service.HelloApi; import com.spring.service.impl.HelloApiImpl1; //静态工厂类 public class DependencyInjectByStaticFactory { public static HelloApi newInstance(String message,int index){ return new HelloApiImpl1(message,index); } }
2、静态工厂Bean spring-staticFactoryDependencyInject.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.xsd"> <bean id="byIndex" class="com.spring.factory.DependencyInjectByStaticFactory" factory-method="newInstance"> <constructor-arg index="0" value="Hello World!"/> <constructor-arg index="1" value="1"/> </bean> <bean id="byType" class="com.spring.factory.DependencyInjectByStaticFactory" factory-method="newInstance"> <constructor-arg type="java.lang.String" value="Hello World!"/> <constructor-arg type="int" value="2"/> </bean> <bean id="byName" class="com.spring.factory.DependencyInjectByStaticFactory" factory-method="newInstance"> <constructor-arg name="message" value="Hello World!"/> <constructor-arg name="index" value="3"/> </bean> </beans>
3、创建测试DependencyInjectByStaticFactoryTest类:
package com.spring.test; import org.junit.Test; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.spring.service.HelloApi; public class DependencyInjectByStaticFactoryTest { @Test public void DIByStaticFactory(){ BeanFactory beanFactory=new ClassPathXmlApplicationContext("spring-staticFactoryDependencyInject.xml"); //获取根据参数索引依赖注入的Bean HelloApi byIndex=beanFactory.getBean("byIndex", HelloApi.class); byIndex.sayHello(); //获取根据参数类型注入的Bean HelloApi byType=beanFactory.getBean("byType", HelloApi.class); byType.sayHello(); //获取根据参数名字依赖注入的Bean HelloApi byName=beanFactory.getBean("byName", HelloApi.class); byName.sayHello(); } }
4、输出结果:
1: Hello World!
2: Hello World!
3: Hello World!
创建实例工类:
package com.spring.factory; import com.spring.service.HelloApi; import com.spring.service.impl.HelloApiImpl1; //实例工厂类 public class DependencyInjectByInstanceFactory { public HelloApi newInstance(String message,int index){ return new HelloApiImpl1(message,index); } }
创建Bean配置文件spring-instanceFactoryDependencyInject.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.xsd"> <bean id="instanceFactory" class="com.spring.factory.DependencyInjectByInstanceFactory"/> <bean id="byIndex" factory-bean="instanceFactory" factory-method="newInstance"> <constructor-arg index="0" value="Hello World!"/> <constructor-arg index="1" value="1"/> </bean> <bean id="byType" factory-bean="instanceFactory" factory-method="newInstance"> <constructor-arg type="java.lang.String" value="Hello World!"/> <constructor-arg type="int" value="2"/> </bean> <bean id="byName" factory-bean="instanceFactory" factory-method="newInstance"> <constructor-arg name="message" value="Hello World!"/> <constructor-arg name="index" value="3"/> </bean> </beans>
创建测试DependencyInjectByInstanceFactoryTest类:
package com.spring.test; import org.junit.Test; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.spring.service.HelloApi; public class DependencyInjectByInstanceFactoryTest { @Test public void DIByInstance(){ BeanFactory beanFactory=new ClassPathXmlApplicationContext("spring-instanceFactoryDependencyInject.xml"); //获取根据参数索引依赖注入的Bean HelloApi byIndex=beanFactory.getBean("byIndex", HelloApi.class); byIndex.sayHello(); //获取根据参数类型注入的Bean HelloApi byType=beanFactory.getBean("byType", HelloApi.class); byType.sayHello(); //获取根据参数名字依赖注入的Bean HelloApi byName=beanFactory.getBean("byName", HelloApi.class); byName.sayHello(); } }
输出结果:
1: Hello World!
2: Hello World!
3: Hello World!
相关推荐
总的来说,JavaEE Spring中的静态工厂创建实例是一种高级的DI实现方式,它提供了更多的灵活性和控制力,但同时也增加了代码的复杂性。理解并合理运用静态工厂方法,可以帮助我们更好地设计和组织应用程序的架构。在...
在Spring框架中,实例工厂注入是一种创建对象的方式,它允许我们通过自定义的工厂方法来控制对象的实例化过程。这种方式对于那些初始化过程复杂或者需要特殊处理的对象特别有用。下面我们将详细探讨Spring中的实例...
总结来说,Spring框架通过静态工厂方法进行依赖注入提供了一种灵活的创建对象的方式。这种方式允许我们在不修改代码的情况下,通过修改配置来改变对象的创建逻辑,这对于维护和扩展复杂系统非常有利。通过实践...
调用实例工厂方法创建bean,与调用静态工厂方法创建bean 的用法基本相似。 区别如下: ·调用实例工厂方法创建bean 时,必须将实例工厂配置成bean 实例。 而静态工厂方法则无须配置工厂bean。 ·调用实例工厂方法...
在Spring框架中,静态工厂方法是一种创建Bean对象的方式,它允许我们通过调用类中的静态方法来实例化对象,而不是直接使用new关键字。这种方式在某些特定场景下非常有用,例如当我们需要控制对象的创建过程或者对象...
本篇将详细探讨两种工厂方法——实例工厂方法和静态工厂方法,用于创建Spring Bean。 首先,我们要理解Spring Bean的概念。Spring Bean是Spring IoC容器管理的对象,这些对象的生命周期、依赖关系以及初始化行为由...
本文将深入探讨Spring中实例化Bean的三种主要方式:构造器注入、静态工厂方法注入以及实例工厂方法注入。 #### 1. 构造器注入(Constructor Injection) 构造器注入是指通过调用Bean类的构造器来创建Bean实例。...
在Spring框架中,Bean的创建方式多样,其中两种常见的非XML配置方式是通过静态工厂方法和实例工厂方法来创建Bean。这些方法为Spring容器提供了更灵活的Bean实例化策略,让我们深入了解一下这两种方法。 首先,静态...
本篇文章将深入探讨Spring项目中Bean的实例化过程,包括三种主要的bean实例化方式:构造方法、静态工厂和实例工厂。 首先,让我们了解什么是Bean。在Spring中,Bean是应用程序中的业务对象,它们由Spring容器负责...
对于工厂方法,可以定义一个静态或非静态的工厂方法,并通过`@Bean`注解指定工厂方法。 总之,Spring IOC和DI是现代Java企业级开发中的重要工具,它们降低了组件之间的耦合,提高了代码的灵活性和可维护性。掌握...
本文将深入探讨Spring框架中的依赖注入,以及如何通过静态工厂、实例工厂、注解等方式实现bean的创建和管理。 首先,我们需要理解什么是控制反转(IOC)。在传统的编程模式中,对象之间直接相互依赖,导致代码耦合...
- **工厂方法**:可以定义一个静态或非静态工厂方法,Spring调用这个方法来实例化bean。 3. **依赖注入(DI)** Spring的依赖注入允许bean之间通过接口而非具体实现进行耦合,提高了代码的可测试性和可维护性。...
3. 静态工厂注入:Spring允许使用静态工厂方法创建Bean。这需要在配置文件中指定工厂方法和返回的对象类型。尽管示例中未提供静态工厂的示例,但在实际应用中,可以定义一个静态方法来创建Bean实例。 4. 实例工厂...
Spring支持通过XML配置文件使用构造函数注入和setter方法注入两种属性注入方式。 - 构造函数注入:在元素中声明的属性,通过构造函数传递给Bean实例。 - setter方法注入:通过元素设置的属性,Spring调用相应的...
Bean是应用中的对象,可以是任何Java类的实例,由Spring IoC容器管理和控制其生命周期。 ### 2. Spring中的IoC实例 #### 数据模型 示例中提到了一个简单的数据模型,包含一个`Human`接口以及两个实现类`Chinese`...
spring-2 演示了外部配置文件的引入(connection),spel(spring el)表达式 ,静态工厂方式及实例工厂方式及factorybean方式创建bean, spring的生命周期及BeanPostProcessor的使用,注解方式创建bean 及使用...
在Spring中,有两种方式实现依赖注入:构造器注入和setter注入。构造器注入是在创建对象时就注入依赖,而setter注入则是在对象创建后通过setter方法注入依赖。此外,Spring还支持接口的工厂方法来创建对象,这就是...
- 在Spring框架中,Bean的实例化可以通过三种方式完成:构造方法实例化、静态工厂实例化和实例工厂实例化。 基于注解的装配方式基本用法: - 使用注解创建Bean,比如@Component、@Service等,可以指定Bean的名称,...