`

spring静态工厂注入和实例工厂注入

 
阅读更多

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!

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    spring 实例的工厂方法 依赖注入属性,都使用property 元素确

    调用实例工厂方法创建bean,与调用静态工厂方法创建bean 的用法基本相似。 区别如下: ·调用实例工厂方法创建bean 时,必须将实例工厂配置成bean 实例。 而静态工厂方法则无须配置工厂bean。 ·调用实例工厂方法...

    spring4示例代码

    spring-2 演示了外部配置文件的引入(connection),spel(spring el)表达式 ,静态工厂方式及实例工厂方式及factorybean方式创建bean, spring的生命周期及BeanPostProcessor的使用,注解方式创建bean 及使用...

    吴跟强_企业级Java框架编程实验册1

    1.2 掌握Spring的Ioc注入方式:传值注入和构造注入 1.3 掌握Spring的静态工厂注入方式 1.4 掌握Spring的实例工厂注入方式 2.2 根

    spring.doc

    3.3.2使用静态工厂方法实例化(简单工厂模式) 14 3.3.3初始化(创建)bean时机 15 Lazy-init初始化bean的时机拓展: 15 3.4 Bean的作用域 16 Scope单例多例作用域拓展: 16 3.4.1 singleton(默认值) 16 3.4.2 prototype...

    Spring 依赖注入

    简单介绍Ssm框架中spring中的控制反转,即IOC。里面包含静态工厂,实例工厂加载方法,还有bean的创建和对bean的操作,加入注解等操作,还自己配置了一个Date和String时间转化器

    Spring.html

    静态工厂 3.实例工厂 管理对象 对象关系DI 构造器注入 set注入 生命周期 scope:prototype/singleton init-method destroy-method API BeanFactory:使用这个工厂创建对象的方式都是懒加载,在...

    spring 黑马教程

    3、Spring容器内部对象的创建:可以使用类构造器实例化、静态工厂方法实例化等方式来创建对象。 4、初始化bean时机:Spring默认在启动时将所有singleton bean提前进行实例化。 Spring的使用可以简化企业开发,...

    Spring 3 Reference中文

    4.3.2.2 使用静态工厂方法来实例化.. 36 4.3.2.3 使用实例工厂方法来实例化.. 37 4.4 依赖 38 4.4.1 依赖注入. 38 4.4.1.1 基于构造方法的依赖注入 39 4.4.1.2 基于setter 方法的依赖注入...

    spring.net中文手册在线版

    通过静态工厂方法创建对象 4.2.3.3.通过实例工厂方法创建对象 4.2.4.泛型类的对象创建 4.2.4.1.通过构造器创建泛型类的对象 4.2.4.2.通过静态工厂方法创建泛型类的对象 4.2.4.3.通过实例工厂方法创建泛型类的对象...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...

    Spring.3.x企业应用开发实战(完整版).part2

    4.3.3 工厂方法注入 4.3.4 选择注入方式的考量 4.4 注入参数详解 4.4.1 字面值 4.4.2 引用其他Bean 4.4.3 内部Bean 4.4.4 null值 4.4.5 级联属性 4.4.6 集合类型属性 4.4.7 简化配置方式 4.4.8 自动装配 4.5 方法...

    Spring攻略(第二版 中文高清版).part1

    2.1 调用静态工厂方法创建Bean 57 2.1.1 问题 57 2.1.2 解决方案 57 2.1.3 工作原理 57 2.2 调用一个实例工厂方法创建Bean 58 2.2.1 问题 58 2.2.2 解决方案 59 2.2.3 工作原理 59 2.3 从静态字段...

    springIOC案例

    包含spring的和Junit的jar包,采用Junit测试,一共四个案例,主要讲述:1.怎么利用IOC容器获得实例化对象;2.IOC容器到底是如何...3.静态工厂方式实例化Bean;4.依赖和依赖注入的几种方式。以及一张应用&gt;&gt;的ppt。

    Spring攻略(第二版 中文高清版).part2

    2.1 调用静态工厂方法创建Bean 57 2.1.1 问题 57 2.1.2 解决方案 57 2.1.3 工作原理 57 2.2 调用一个实例工厂方法创建Bean 58 2.2.1 问题 58 2.2.2 解决方案 59 2.2.3 工作原理 59 2.3 从静态字段...

    Spring3.x企业应用开发实战(完整版) part1

    4.3.3 工厂方法注入 4.3.4 选择注入方式的考量 4.4 注入参数详解 4.4.1 字面值 4.4.2 引用其他Bean 4.4.3 内部Bean 4.4.4 null值 4.4.5 级联属性 4.4.6 集合类型属性 4.4.7 简化配置方式 4.4.8 自动装配 4.5 方法...

    Spring面试题

    spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。 设置注入的优点:直观,自然 构造注入的优点:可以在构造器中决定依赖关系的顺序。 什么是AOP? 面向切面编程(AOP)完善spring的...

    spring3.1中文参考文档

    1.1 依赖注入和控制反转 ............................................................................................................................7 1.2 模块..............................................

    Spring入门到精通2017视频教程

    掌握系统框架设计原理,工厂模式,委托模式的实现,Spring的IOC依赖注入技术,Struts2,Hibernate与Spring的整合,ApplicationContext读取资源文件的3种方法,多个配置文件的加载与导入,静态代理与动态代理,...

    基于maven项目的SSM框架与layu前端框架的代码

    利用了工厂模式将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都...

    spring学习笔记

    .......................................................................................................12 静态工厂实例化:..................................................................................

Global site tag (gtag.js) - Google Analytics