【spring】1.spring ioc原理和demo

我们先做一个简单的spring例子。

面向接口编程,我们先来定接口

IHelloWorld

package com.services;

public interface IHelloWorld {

	public void sayHello();

}

写一个实现类,并且声明一个String属性,提供set方法注入

package com.services.impl;

import com.services.IHelloWorld;

public class HelloWorld implements IHelloWorld {

	private String helloWorld;

	public void setHelloWorld(String helloWorld) {
		this.helloWorld = helloWorld;
	}

	@Override
	public void sayHello() {
		System.out.println("hello world");
	}

}

编写配置文件

<pre name="code" class="html"><?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

	<bean id="helloWorldBean" class="com.services.impl.HelloWorld">
		<property name="helloWorld">
			<value>helloworld !!!</value>
		</property>
	</bean>

</beans>

注意看。配置文件的含义:

beans里面是各种bean对象的声明。

bean对象里面描述了bean的信息,里面包括bean名称,对应的class文件,class文件里的属性和值。

编程测试文件:

package com;

import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.core.io.ClassPathResource;

import com.services.IHelloWorld;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		ClassPathResource resource = new ClassPathResource(
				"applicationContext.xml");
		DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
		XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
		reader.loadBeanDefinitions(resource);
		IHelloWorld hello = (IHelloWorld) factory.getBean("helloWorldBean");
		hello.sayHello();
	}

}

ioc原理简单分析:

我们看看测试代码:

//这里其实是读取xml文件

ClassPathResource resource = new ClassPathResource(

"applicationContext.xml");

//创建bean工厂,把读取到的载入我们的xml的reader当中

DefaultListableBeanFactory factory = new DefaultListableBeanFactory();

XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);

reader.loadBeanDefinitions(resource);

//这里其实是通过反射,获得bean对象

IHelloWorld hello = (IHelloWorld) factory.getBean("helloWorldBean");

hello.sayHello();

简述ioc原理:如果我们不使用spring,那么bean对象创建就是通过new等方式硬代码的方式写入程序中。

ioc其实是把bean的信息写入xml文件,通过jdom去解析到bean节点信息,然后里面包含bean的id或者name,还有bean对应的class全路径,那么我们通过getBean方法,就可以获取到bean的类全路径,通过反射就可以得到bean对象,程序内部其实是用hashMap来保存xml解析出来的信息的,hashMap的key其实就是我们写在xml里面的id,而值就是class对应的类全路径,然后通过对象工厂,得到bean工厂后getBean就可以反射得到bean对象。类的创建过程是spring来帮你完成,我们自己的代码中并未创建对象,也没有对属性赋值,整个过程spring容器完成,这也就是通常所说的依赖注入,或者说叫控制反转(创建对象的过程是spring容器完成的,控制权发生了变化)

ioc其实里面应用到了jcom(解析xml),反射(xml里面的类全路径后getBean得到对象),工厂设计模式。

部分源码:

BeanFactory为顶层接口:该接口有很多常见的子接口和实现类,大家可能还会看到很多其他人代码用的XmlBeanFactory等子类实现,该接口有很多方法,我们常用获得bean的方法getBean方法如下:

而大家代码第一步获取xml对象的方法,对应接口其实是Resource接口,里面也有很多常见的实现类。

太具体的源码 大家自己看看api就都懂了  粗浅的原理还是很容易懂得

时间: 2024-10-10 21:05:40

【spring】1.spring ioc原理和demo的相关文章

Spring技术内幕——Spring Framework的IOC容器实现(一)

一.SpringIOC容器概述 IOC容器和依赖反转的模式 在面向对象的系统中,对象封装了数据和对数据的处理,对象的依赖关系常常体现在对数据和方法的依赖上.这些依赖关系可以通过把对象的依赖注入交给框架IOC容器来完成.他可以再解耦代码的同时提高了代码的可测试性. 依赖控制反转的实现由很多种方式,在Spring中,IOC容器是实现这个模式的载体,他可以再对象生成或者初始化时直接将数据注入到对象中,也可以通过将对象引用注入到对象数据域中的方式来注入对方法调用的依赖.这种依赖注入是可以递归的,对象被逐

小叙Spring.NET(Ioc与DI)的使用步骤

那今天就介绍一下我理解的Spring.net吧.介绍Spring.NET之前,先谈点其他的.我们都知道,.NET有一个基本原则"高内聚,低耦合".关于这个概念,想必大家都知道.所谓高内聚,也就是模块内部内聚,各个模块之间"低耦合".也就是结耦,降低耦合度.所以我们选取了传统的三层,把,数据访问层,业务逻辑层,UI层分离,降低耦合度!       但是这还不够,我们为了让业务逻辑层与数据访问层彻底结耦.可以用面向接口编程的思想,采用抽象工厂模式.也就是建立工厂,采用映

spring MVC入门示例(hello world demo)

1. Spring MVC介绍 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框 架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的. Spring Web MVC也是服务到工作者模式的实现,但进行可优化.前端控制器是DispatcherServlet:应用控制器其实拆为处理器映射器(Handler M

Spring基础、IOC(控制反转)、AOP(面向切面编程)、Log4j、注解配置

学习示例代码,包含本篇介绍的Spring常用操作示例和所有所需jar文件下载地址:http://download.csdn.net/detail/daijin888888/9556697 1.什么是Spring,有什么作用 --Spring框架属于一个解决方案框架,可以对其他技术和框架进行整合应用. --*好处是:将程序中的各个组件和框架技术进行解耦,便于日后系统维护,升级和扩展操作. --在SSH中,会将Action,DAO组件都交给Spring框架管理,由Spring框架创建这些对象,建立这

Spring中的IOC(一)

1. 什么是IOC的功能? * IoC -- Inverse of Control,控制反转,将对象的创建权反转给Spring!! * 使用IOC可以解决的程序耦合性高的问题!! 2. 代码示例 1 UserService: 2 public interface UserService { 3 public void sayHello(); 4 } 5 6 UserServiceImpl: 7 public class UserServiceImpl implements UserService

Spring 总览及 IOC 容器的使用 —— Spring 官方文档解读(一)

Spring 总览及 IOC 容器的使用 -- Spring 官方文档解读(一) 什么是 Spring? spring 这个词在不同情况下有不同意义.可以指 Spring 框架本身,但更多地被用来表示 Spring 整个家族的产品. 设计理念 学习框架必须要知道它的设计理念,Spring 框架有着以下的理念: Spring 让你在架构种的各个层面有更多的选择,并且允许你尽晚的做出决策.比如,你在项目完成后可以通过更改配置来切换持久层的提供者. Spring 具有强大的灵活性,它不在意你是如何完成

Spring入门系列-IOC

什么是Spring Spring概述(了解) Spring是什么 Spring是JavaEE应用 full-stack轻量级开源框架,核心是:IoC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层Spring MVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架. 什么是一站式开

理解Spring中的IoC和DI

什么是IoC和DI IoC(Inversion of Control 控制反转):是一种面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度.其基本思想是:借助于"第三方"实现具有依赖关系的对象之间的解耦. DI(Dependence Injection 依赖注入):将实例变量传入到一个对象中去(Dependency injection means giving an object its instance variables). 控制反转是一种思想 依赖注入是一种设计模式 I

Spring入门 (IOC)

1.实现原理 IOC:控制反转,指的是对象创建权反转(交给)Spring,作用是实现了程序的解耦合. 2.实现步骤 (1)    下载jar包(参见开发库/spring) (2)    创建web项目,导入jar包 (3)    书写配置文件,并注册对象到容器中 Xml文件名字与位置任意,建议放到src目录下起名为aoolicationContext.xml Xml中注册对象: (4)测试代码 3.Spring创建对象的三种方式(Bean创建方式) (1)工厂类: (2)配置文件: (3)