package org.spring.chapter2.helloworld;
public class HelloImpl3 implements HelloApi {
private String message;
private int index;
public HelloImpl3() {
this.message="Hello World in Empty Constructor";
}
public HelloImpl3(String message,int index) {
this.message = message;
this.index = index;
}
@Override
public void sayHello() {
System.out.println(index+":"+message);
}
}
package org.spring.chapter2.helloworld;
public class InJectByStaticFactory {
public static HelloApi newInstance(String message,int index){
return new HelloImpl3(message,index);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 通过构造器参数索引方式依赖注入 -->
<bean id="byIndex" class="org.spring.chapter2.helloworld.InJectByStaticFactory" factory-method="newInstance">
<constructor-arg index="0" value="Hello Spring By Index" />
<constructor-arg index="1" value="1"></constructor-arg>
</bean>
<!-- 通过构造器参数类型方式依赖注入 -->
<bean id="byType" class="org.spring.chapter2.helloworld.InJectByStaticFactory" factory-method="newInstance">
<constructor-arg type="java.lang.String" value="Hello Spring By Type" />
<constructor-arg type="int" value="2" />
</bean>
<!-- 通过构造器参数名称方式依赖注入 -->
<bean id="byName" class="org.spring.chapter2.helloworld.InJectByStaticFactory" factory-method="newInstance">
<constructor-arg name="message" value="Hello Spring By Name" />
<constructor-arg name="index" value="3"/>
</bean>
</beans>
@Test
public void testStaticConstructInject(){
ApplicationContext context = new ClassPathXmlApplicationContext("org/spring/chapter2/helloworld/helloworld5.xml");
//1:按照参数索引依赖注入的Bean
HelloApi byIndex = context.getBean("byIndex",HelloApi.class);
byIndex.sayHello();
//2:按照参数类型依赖注入的Bean
HelloApi byType = context.getBean("byType",HelloApi.class);
byType.sayHello();
//3:根据参数名称依赖注入的Bean
HelloApi byName = context.getBean("byName",HelloApi.class);
byName.sayHello();
}
分享到:
相关推荐
本篇将详细讲解如何使用静态工厂方法进行依赖注入,结合提供的"SpringIOCTest3"项目进行说明。 首先,理解依赖注入的基本概念。依赖注入是指在运行时,由容器(如Spring IoC容器)负责创建对象并管理这些对象之间的...
而静态工厂方法则使用class 元素确定静态工厂类。 其相同之处如下: ·都需使用factory-method属性指定产生bean 实例的工厂方法。 ·工厂方法如果需要参数,都使用constructor-arg属性确定参数值。 ·其他依赖...
本篇将详细介绍如何在Spring中使用静态工厂方法来创建实例。 首先,让我们理解什么是静态工厂方法。静态工厂方法是类中的一个静态成员方法,它不依赖于类的实例,而是通过类名直接调用,返回一个对象。这种方法与...
在Spring框架中,静态工厂方法是一种创建Bean对象的方式,它允许我们通过调用类中的静态方法来实例化对象,而不是直接使用new关键字。这种方式在某些特定场景下非常有用,例如当我们需要控制对象的创建过程或者对象...
(1)使用静态工厂实例化Department (2)使用IOC容器实例化上述类,并对属性使用构造方法注入,然后测试。 (3)模拟三层体系结构,为其创建对应的departmentDao、departmentService、departmentController;实现对...
2. 静态工厂方法: 使用静态方法作为工厂,可以创建不同类型的依赖对象,无需实例化工厂类。 ```python class MyClass: def __init__(self, dependency): self._dependency = dependency class ...
在Spring框架中,Bean的创建方式多样,其中两种常见的非XML配置方式是通过静态工厂方法和实例工厂方法来创建Bean。这些方法为Spring容器提供了更灵活的Bean实例化策略,让我们深入了解一下这两种方法。 首先,静态...
在Spring框架中,实例工厂注入是一种创建对象的方式,它允许我们通过自定义的工厂方法来控制对象的实例化过程。这种方式对于那些初始化过程复杂或者需要特殊处理的对象特别有用。下面我们将详细探讨Spring中的实例...
本篇将详细探讨两种工厂方法——实例工厂方法和静态工厂方法,用于创建Spring Bean。 首先,我们要理解Spring Bean的概念。Spring Bean是Spring IoC容器管理的对象,这些对象的生命周期、依赖关系以及初始化行为由...
本文将深入探讨Spring中实例化Bean的三种主要方式:构造器注入、静态工厂方法注入以及实例工厂方法注入。 #### 1. 构造器注入(Constructor Injection) 构造器注入是指通过调用Bean类的构造器来创建Bean实例。...
- **静态工厂注入**:Spring也支持使用静态工厂方法创建Bean,只需要在XML配置中指定工厂类和工厂方法。 理解并熟练掌握Spring的IOC容器及其注入机制,对于Java开发者来说至关重要,因为它可以帮助我们编写更加松...
在静态工厂方法注入中,使用了`factory-method`属性来指定创建对象的方法。 5. XML配置文件:Spring使用XML文件来配置依赖注入,通过`<beans>`标签定义一个bean容器,并通过`<bean>`标签来声明一个bean,这个bean...
3. 静态工厂注入:Spring允许使用静态工厂方法创建Bean。这需要在配置文件中指定工厂方法和返回的对象类型。尽管示例中未提供静态工厂的示例,但在实际应用中,可以定义一个静态方法来创建Bean实例。 4. 实例工厂...
使用形式化方法对 IoC 依赖注入技术进行描述和分析,可以更加精确、完整地描述 IoC 依赖注入技术的机制。IoC 框架的设计是实现 IoC 依赖注入技术的重要组件,需要完成以下几个基本的功能。IoC 框架的设计可以分为...
静态工厂方法是属于类的静态方法,不需要先创建工厂实例就能调用,而实例工厂则需要先有一个工厂实例,然后通过该实例调用工厂方法来创建对象。这两种工厂方法都可以通过配置XML来指定,Spring会根据配置的工厂方法...
服务定位器模式的一个常见实现是通过静态工厂类或单例模式来实现。 - **使用ServiceLocator**:服务定位器模式允许对象通过查找服务来获取依赖项,而不是直接注入。这种方式减少了对象间的直接耦合,但也可能导致...
对于工厂方法,可以定义一个静态或非静态的工厂方法,并通过`@Bean`注解指定工厂方法。 总之,Spring IOC和DI是现代Java企业级开发中的重要工具,它们降低了组件之间的耦合,提高了代码的灵活性和可维护性。掌握...
4. **实例工厂方法注入**:类似于静态工厂,但使用实例方法创建对象,需要指定工厂bean的id和工厂方法名。 **总结** Spring的AOP和IOC/DI使得代码更加模块化,降低了耦合,提高了可维护性和可测试性。AOP解决了交叉...
总之,面对ActionForm、Servlet、Filter、Listener这些特殊情况,我们需要灵活运用Spring的DI机制,结合静态字段、工厂方法以及Web容器的特性,以确保对象的正确注入和管理。同时,随着技术的发展,如Spring Boot和...
例如,我们可以定义拦截器、策略和工厂方法来定制对象的创建过程。 8. **容器的高级功能**:Unity还支持依赖注入的其他高级特性,如依赖注入到属性、依赖注入到静态类、泛型类型注入、依赖注入到数组和集合等。 9....