`
ponlya
  • 浏览: 164413 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring3之 IoC容器的实例化

阅读更多

Bean:Spring中,那些组成你应用程序的主体(backbone)及由Spring IOC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。 而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。

org.springframework.beans.factory.BeanFactorySpring IoC容器的实际代表者,IoC容器负责容纳此前所描述的bean,并对bean进行管理,包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。

Spring IoC容器可以通过多种途径来加载配置元数据,比如本地文件 系统、Java CLASSPATH等(貌似URL也行)。

Spring3之 IoC容器的实例化

 

Spring IoC容器的实例化非常简单,可以用ClassPathXmlApplicationContext or FileSystemXmlApplicationContext类来完成,AnnotationConfigApplicationContext也可以用注解来完成。

 

a).XML式

包名:com.spring305.test.iocInstance

文件列表:BeanA.java,BeanB.java,IocInstance.java,IocInstanceA.xml,在此包下有一包temp,另有一份测试配置文件IocInstance.xml

代码如下:

BeanA.java

BeanB.java

 

 

public class BeanA {

	private int id;
	private String name;

	public BeanA() {
	}
	
	public BeanA(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	
	public void testMethod(){
		System.out.println(BeanA.class);
	}

                  setter,getter
}

 

 

 

 

 

public class BeanB {

	private int id;
	private String name;

	public BeanB() {
	}
	
	public BeanB(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	
	public void testMethod(){
		System.out.println(BeanB.class);
	}
	
          ...getter,setter

}

 

 

IocInstanceA.xml

	<!-- 下面是引用XML的路径及写法注释,使用时只保留一个,并且对应相应路径 -->
	<!-- 这二种表示这个引入的文件要与本XML文件在同一级目录中
		<import resource="IocInstance.xml"/>
		<import resource="/IocInstance.xml"/>
		下面二种表示在当前XML目录中temp文件夹下面
		 <import resource="temp/IocInstance.xml"/>
		 <import resource="/temp/IocInstance.xml"/>
	 -->
	 <!-- 这下面的一个是相对路径的书写方式,引入根目录下的XML文件,
	 	<import resource="../../../../IocInstance.xml"/>
	 -->
	 
	 <!--
	 	classpath:这种方式可以使用但是,在spring3的英文文档中并不推荐使用,推荐使用用../到父目录中或者/到下级目录来找,因为classpath:可能在部署的时候引向不正确的目录
		<import resource="classpath:IocInstance.xml"/>	 
	  -->
	  <!-- 下面的这种方式也是可以的,但是,也不被推荐,原因同上,如果采用这二种情况,spring3建议把路径写上,然后用${}来引入 -->
	<import resource="file:D:/workspace/MyEclipseSSH/Spring305/src/IocInstance.xml"/>
	 
	<bean id="beanA" class="com.spring305.test.iocInstance.BeanA"></bean>

 

 

src目录下IocInstance.xml ,主要是用来测试从一个XML文件引入另外一个文件来实例化的,它和temp包下的IocInstance.xml的内容一样也只有beanB这个bean,后者主要是用来测试路径的。

IocInstance.xml

<bean id="beanB" class="com.spring305.test.iocInstance.BeanB"></bean>

 

 

 

 

测试类:

IocInstance.java

 

import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class IocInstance {

	@Test//annotation实例化容器
	public void TestIocInstanceAnnotation(){
		ApplicationContext atx = new AnnotationConfigApplicationContext(BeanAAnnotaion.class);
		//下面的Bean名是类的名字,首字母小写
		//BeanAAnnotaion a = (BeanAAnnotaion)atx.getBean("beanAAnnotaion");
		//下面是自己在类中用@bean定义的bean
		//BeanAAnnotaion a = (BeanAAnnotaion)atx.getBean("getBeanAAnnotation");
		//System.out.println(a.getMsg());
		
		//下面的是定义的一个返回类型为String类型的bean
		String getMsg = atx.getBean("getMsg",String.class);
		System.out.println(getMsg);
		
		
	}
	
	//@Test//XML实例化容器
	public void TestIocInstanceXML(){
		//加载1到N个XML文件 ,文件前加与不加'/',代表的都是src目录下的文件
		//ApplicationContext atx = new ClassPathXmlApplicationContext("IocInstance.xml");
		//ApplicationContext atx = new ClassPathXmlApplicationContext(new String[]{"IocInstance.xml"});
		//ApplicationContext atx = new ClassPathXmlApplicationContext(new String[]{"IocInstance.xml","IocInstance2.xml"});
		//ApplicationContext atx = new ClassPathXmlApplicationContext(new String[]{"/IocInstance.xml"});
		
		//BeanB a = (BeanB)atx.getBean("beanB");
		//a.testMethod();
		
		//XML配置在com...包下,则可以如下书写
		//ApplicationContext atx = new ClassPathXmlApplicationContext(new String[]{"/com/spring305/test/iocInstance/IocInstanceA.xml"});
		//ApplicationContext atx = new ClassPathXmlApplicationContext(new String[]{"com/spring305/test/iocInstance/IocInstanceA.xml"});
		//下面也可以用FileSystemXmlApplicationContext来加载XML文件,这里要写文件的绝对位置
		ApplicationContext atx = new FileSystemXmlApplicationContext(new String[]{"file:D:/workspace/MyEclipseSSH/Spring305/src/com/spring305/test/iocInstance/IocInstanceA.xml"});
		
		//ApplicationContext接口实现了BeanFactory接口
		BeanFactory factory = atx;
		
		//BeanA a = (BeanA)atx.getBean("beanA");
		//下面的一种得到bean的方式,不用进行和以前一样写强制转换
		BeanA a = atx.getBean("beanA",BeanA.class);
		a.testMethod();

	}
	
}

 

 

b).Annotaion式

BeanAAnnotaion.java

 

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeanAAnnotaion {

	@Bean
	public BeanAAnnotaion getBeanAAnnotation(){
		return new BeanAAnnotaion();
	}
	
	@Bean 
	public String getMsg(){
		return BeanAAnnotaion.class.toString();
	}
	
}

 

 

 

 

分享到:
评论

相关推荐

    Spring的IoC容器初始化源码解析

    而控制反转则是将这种控制权交给外部容器(如Spring的IoC容器),由容器来负责实例化、配置和管理组件之间的关系。 ##### 2.2 依赖注入的实现方式 依赖注入(Dependency Injection,DI)是实现控制反转的一种常用...

    Spring IOC容器应用实例

    **Spring IOC 容器应用实例** Spring 框架的核心组件之一是 Inversion of Control (IoC) 容器,也常被称为依赖注入(Dependency Injection)容器。IoC 是一种设计模式,它将对象的创建和管理从应用程序的业务逻辑中...

    Spring IOC容器实现分析.pdf 下载

    2. Bean的实例化:当需要使用某个Bean时,IOC容器会根据Bean的定义创建实例。可以是单例模式,也可以是多例模式。 3. 依赖注入:在实例化Bean的过程中,容器会根据定义的依赖关系,将其他Bean注入到当前Bean中,...

    模拟Spring的IoC容器实现注解自动装配

    而注解自动装配(Autowired)是Spring IoC容器的一种高级特性,它允许我们通过注解来声明对象之间的依赖,无需手动编写XML配置。现在,我们将深入探讨如何模拟Spring的IoC容器实现注解自动装配。 首先,我们需要...

    Java-Spring-SpringIoC容器-SpringIoC的学习

    在Java Spring框架中,Spring IoC(Inversion of Control,控制反转)是核心特性之一,它使得应用程序的组件之间的依赖关系不再由代码直接管理,而是交由Spring IoC容器负责。这种设计模式降低了代码间的耦合,提高...

    手写一个SpringIoc容器

    本项目"手写一个SpringIoc容器"旨在模仿Spring的IOC(Inversion of Control,控制反转)功能,帮助开发者深入理解Spring的工作原理,提升对依赖注入(Dependency Injection)模式的认识。 在实现自定义的Spring IOC...

    Spring的IoC容器

    在Spring中,IoC容器通过配置元数据(如XML、注解或Java配置类)来定义对象及其依赖关系,然后在运行时根据这些信息实例化对象并进行依赖注入。 ### 2. 容器的主要功能 - **对象的实例化**:IoC容器可以创建对象,...

    Spring IoC容器实现的结构分析

    Spring IoC容器是Spring框架的核心,它负责管理应用对象的生命周期和依赖关系。通过对IoC(Inversion of Control,控制反转)的实现,Spring容器将对象的创建和组装工作从应用代码中分离出来,使得应用更易于测试和...

    Spring实现原理及IoC容器的优点

    Spring容器通过反射机制实例化对象,解析并注入依赖。这样的设计允许我们轻松地更改对象的行为,只需调整配置,无需修改代码。 接下来,让我们看看Spring的IoC容器有哪些优点: 1. **松耦合**:由于对象的创建和...

    Spring容器中IOC

    IOC容器是Spring Framework的核心组件之一,负责管理应用程序中的对象实例,控制对象的生命周期,并提供依赖注入的功能。 IOC容器的主要功能是控制反转和依赖注入。控制反转是指将对象的控制权从程序员手中反转给...

    Spring源代码解析(一):IOC容器.doc

    在Spring源代码解析的第一部分,我们将聚焦于IOC容器,特别是BeanFactory接口,它是所有Spring容器的基础。 BeanFactory接口是Spring的基石,它定义了基本的容器操作,如获取Bean、检查Bean是否存在、确定Bean的...

    Spring基础:IoC容器(1)

    Spring容器负责实例化这两个bean,并自动将`dependencyBean`注入到`exampleBean`中。 另一方面,注解DI允许我们在类上使用如`@Component`、`@Service`、`@Repository`和`@Controller`来标记它们为Spring管理的bean...

    springIoc实现原理

    Spring Ioc容器是整个Spring框架的基石,它负责创建、配置和管理对象。容器通过读取XML、Java注解或Java配置类等方式,获取对象的定义信息,然后根据这些信息实例化对象并进行依赖注入。 **三、依赖注入(DI,...

    spring ioc和aop原理流程图(详细)

    以下是Spring IOC容器的主要知识点: 1. **Bean的定义**:在Spring中,业务对象被称为Bean。Bean定义包含了创建和管理Bean的所有信息,如类名、属性值、依赖关系等,通常通过XML、注解或Java配置来定义。 2. **...

    Spring 之IoC入门实例

    使用Spring的`ApplicationContext`来加载配置文件并启动IoC容器。以下是如何加载并获取`Bean`的示例: ```java ApplicationContext context = new ClassPathXmlApplicationContext("SpringTest1.xml"); ...

    Spring基础:IoC容器(2)

    至于“工具”标签,可能意味着博主分享了如何在实际项目中使用Spring IoC容器,或者介绍了一些与之相关的工具和技巧,比如使用Maven进行构建和管理依赖。 在文件名称“maventest06”中,我们可以推测这是一个Maven...

    详解Spring IOC 容器启动流程分析

    Spring IOC 容器是 Java 企业级应用程序的核心组件之一,它提供了一个统一的依赖注入机制,使得应用程序的组件之间能够松耦合。Spring IOC 容器的启动流程是整个 Spring 框架的核心所在,本文将从 ...

    山寨spring_ ioc容器

    通过阅读源码,开发者可以深入了解IoC容器的工作原理,包括如何解析配置,如何实例化和管理Bean,以及如何处理依赖关系。这对于理解Spring框架或者自己动手实现类似功能非常有帮助。 标签“工具”表明这个项目可能...

Global site tag (gtag.js) - Google Analytics