`

spring(1):spring入门,IOC介绍

 
阅读更多

http://mynote.iteye.com/admin/blogs/1174520

先看看上面这个简单工厂的例子:

 

spring的IOC类似于简单工厂,为客户端生成实例:将上面的简单工厂改为spring实现,如下:

 

Person接口

package com.test;

public interface Person {
	public String sayHello(String name);
	public String sayGoodbye(String name);
}

 

Chinese

package com.test;

public class Chinese implements Person {

	public String sayGoodbye(String name) {
		return "再见! "+name;
	}

	public String sayHello(String name) {
		return "你好! "+name;
	}

}

 

American

package com.test;

public class American implements Person {

	public String sayGoodbye(String name) {
		return "GoodBye! "+name;
	}

	public String sayHello(String name) {
		return "Hello! "+name;
	}

}

 

applicationContext.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>  
  <bean id="chinese" class="com.test.Chinese"/>
  <bean id="american" class="com.test.American"/>
</beans>

 

测试类

package com.test;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class Client {
	public static void main(String[] args) {
		ClassPathResource cpr = new ClassPathResource("applicationContext.xml");
		XmlBeanFactory factory = new XmlBeanFactory(cpr);
		Chinese chinese = (Chinese) factory.getBean("chinese");
		System.out.println(chinese.sayHello("lisi"));
		System.out.println(chinese.sayGoodbye("lisi"));
	}
}

结果打印出:你好! lisi

                  再见! lisi

 

再看一个例子:

Person接口

package com.test;

public interface Person {
	public void doWork();
}

 

Tool接口

package com.test;

public interface Tool {
	public void doRealWork();
}

 

具体类:Chinese

package com.test;

public class Chinese implements Person {
	private Tool tool;

	public void doWork() {
		tool.doRealWork();
	}

	public Tool getTool() {
		return tool;
	}

	public void setTool(Tool tool) {
		this.tool = tool;
	}
}

 

具体工具A

package com.test;

public class ConcreteToolA implements Tool {

	public void doRealWork() {
		System.out.println("do concrete tool a");
	}

}

 

spring配置文件,可以看到在chinese的bean中引用了ConcreteToolA的实例

<bean id="toolA" class="com.test.ConcreteToolA"/>
<bean id="chinese" class="com.test.Chinese">
	<property name="tool" ref="toolA"/>
</bean>

 测试类

package com.test;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class Client {
	public static void main(String[] args) {
		ClassPathResource cpr = new ClassPathResource("applicationContext.xml");
		XmlBeanFactory factory = new XmlBeanFactory(cpr);
		Person person = (Person) factory.getBean("chinese");
		person.doWork();
	}
}

  

打印结果:do concrete tool a

 

再看一个例子:可以spring配置文件中设置属性的值 

 

GreetingService接口

package com.springinaction.chapter01;

public interface GreetingService {
	public void sayGreeting();
}

 

具体实现类

package com.springinaction.chapter01;

public class GreetingServiceImpl implements GreetingService {
	private String greeting;

	public void sayGreeting() {
		System.out.println(this.greeting);
	}
	
	public void setGreeting(String greeting) {
		this.greeting = greeting;
	}
	
}

 

 

spring配置文件

<bean id="greetingService"  class="com.springinaction.chapter01.GreetingServiceImpl">
    <property name="greeting">
        <value>lisi</value>
    </property>
  </bean>

 

测试类

package com.springinaction.chapter01;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class HelloApp {
	public static void main(String[] args) {
		ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");
		GreetingService greetingService = (GreetingService) context.getBean("greetingService");
		greetingService.sayGreeting();
	}
}

 

 

如果类中的属性是数组类型的该如何处理?看下例:

接口类

package com.test;

public interface Person {
	public void test();
}

 

具体类Person,定义了很多集合类型

package com.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class Chinese implements Person {
	private List schools = new ArrayList();
	private Map score = new HashMap();
	private Properties health = new Properties();
	private Set tools = new HashSet();

	public Map getScore() {
		return score;
	}

	public void setScore(Map score) {
		this.score = score;
	}

	public Properties getHealth() {
		return health;
	}

	public void setHealth(Properties health) {
		this.health = health;
	}
	
	public Set getTools() {
		return tools;
	}

	public void setTools(Set tools) {
		this.tools = tools;
	}
	
	public List getSchools() {
		return schools;
	}

	public void setSchools(List schools) {
		this.schools = schools;
	}

	public void test() {
		System.out.println(schools);
		System.out.println(score);
		System.out.println(health);
		System.out.println(tools);
	}

}

 

在spring配置文件中赋值

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>  
	<bean id="toolA" class="com.test.ConcreteToolA"/>
  	<bean id="chinese" class="com.test.Chinese">
  		<property name="schools">
  			<list>
  				<value>小学</value>
  				<value>中学</value>
  				<value>大学</value>
  			</list>
  		</property>
  		
  		<property name="score">
  			<map>
  				<entry key="数学">
  					<value>81</value>
  				</entry>
  				<entry key="英语">
  					<value>89</value>
  				</entry>
  				<entry key="语文">
  					<value>82</value>
  				</entry>
  			</map>
  		</property>
  		
  		<property name="health">
  			<props>
  				<prop key="血压">正常</prop>
  				<prop key="身高">175</prop>
  			</props>
  		</property>
  		
  		<property name="tools">
  			<set>
  				<value>字符串工具</value>
  				<bean class="com.test.ConcreteToolA"></bean>
  				<ref local="toolA"/>
  			</set>
  		</property>
  	</bean>
</beans>




 

测试类Client

package com.test;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class Client {
	public static void main(String[] args) {
		ClassPathResource cpr = new ClassPathResource("applicationContext.xml");
		XmlBeanFactory factory = new XmlBeanFactory(cpr);
		Person person = (Person) factory.getBean("chinese");
		person.test();
	}
}

 

打印出的结果

[小学, 中学, 大学]
{数学=81, 英语=89, 语文=82}
{血压=正常, 身高=175}
[字符串工具, com.test.ConcreteToolA@a1807c, com.test.ConcreteToolA@fa7e74]

 

分享到:
评论

相关推荐

    JavaEE spring IoC入门案例

    通过学习和实践这个"JavaEE spring IoC入门案例",你将能够理解并掌握如何在Spring框架下实现IoC,从而提高你的JavaEE开发能力。深入理解和运用这些知识点,可以让你在实际项目中编写出更加健壮、易维护的代码。

    《partner4java 讲述Spring入门》之第一步:Spring概述与Spring IoC

    《Spring入门:Spring概述与Spring IoC》是针对初学者的一篇教程,旨在引导开发者进入Spring框架的世界。本文将深入探讨Spring的核心概念,特别是Spring的Inversion of Control(IoC,控制反转)特性,以及如何在...

    JavaEE Spring IoC入门

    总的来说,学习"JavaEE Spring IoC入门"意味着你需要理解Spring如何通过IoC管理对象,掌握XML配置文件的编写,以及如何在Web环境中使用Spring MVC进行开发。此外,还需要了解如何编写测试用例来验证Spring配置的有效...

    spring2.5.6注解以及xml简单ioc入门示例

    这个入门示例项目旨在帮助初学者了解和掌握Spring 2.5.6版本中的注解使用和基于XML的IoC配置。 首先,让我们来探讨一下Spring的IoC概念。IoC是一种设计模式,它将对象的创建和管理权交给了容器,而不是由对象自身...

    Spring Ioc(依赖注入)入门例子--属性注入

    在本例“Spring Ioc(依赖注入)入门例子--属性注入”中,我们将关注如何通过属性注入来管理依赖。 属性注入是指Spring容器将一个对象的属性值设置为另一个对象的引用。这通常用于将服务对象注入到需要使用它们的...

    Spring5-01-Spring入门.doc

    Spring 入门知识点 Spring 概述 Spring 是一个开源框架,旨在简化企业级应用开发。它使简单的 JavaBean 实现以前只有 EJB 才能实现的功能。Spring 是一个 IOC(控制反转)和 AOP(面向切面编程)容器框架。 ...

    Spring_IoC入门笔记.md

    依赖注入:Dependency Injection IOC的作用:降低程序间的偶合(依赖关系) 依赖关系的管理:以后都交给spring来维护 ... ref:用于指定其他bean类型数据,它所指的是在spring的IOC容器中出现的bean

    xmljava系统源码-springdemo:spring3的IOC,AOP,JDBC,orm等各个模块的使用示例集锦,可以作为入门的spri

    spring3的IOC,AOP,JDBC,orm等各个模块的使用示例集锦,可以作为入门的spring学习示例教程 在org.springweb.context.test包下 1.IOC * spring框架设计理念(POJO化) * 1.IOC 概念,作用,优点 Donnot call me,we ...

    Spring中IoC的入门实例

    Spring中的IoC(Inversion of Control,控制反转)是一种设计原则,它将对象的创建和管理权交给框架处理,使得应用程序的组件之间解耦。在本例中,我们将通过一个简单的例子来理解如何在Spring中使用IoC。 首先,...

    一本很不错的关于spring入门的书籍

    这本书籍“一本很不错的关于spring入门的书籍”显然是针对初学者设计的,旨在帮助新手快速掌握Spring的基本概念和核心功能。 Spring框架的核心特性包括: 1. **依赖注入(Dependency Injection,简称DI)**:这是...

    spring4--1.入门及ioc

    入门及ioc"中,我们将深入探讨Spring框架的基础知识,特别是其核心特性——控制反转(Inversion of Control,简称IOC)。 IOC是一种设计模式,它的核心思想是将对象的创建和管理交给一个容器来处理,而不是由对象...

    spring_ioc快速入门

    spring_ioc快速入门

    spring入门学习-2、IOC、DI知识.pdf

    ### Spring入门学习:IOC与DI详解 #### 一、什么是IOC? **IOC**,全称为 **Inversion of Control**(控制反转),它并不是一项具体的技术,而是一种设计思想。在传统的Java开发过程中,当我们需要使用某个组件时...

    Spring 之IoC入门实例

    **Spring之IoC入门实例详解** 在Java世界中,Spring框架以其强大的依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)能力而广受赞誉。IoC是一种设计模式,它将对象的创建和...

    spring入门到精通.pdf

    《Spring入门到精通》这本书是针对Java开发人员深入学习Spring框架的一份宝贵资源。Spring作为Java企业级应用开发中的核心框架,它提供了丰富的功能,包括依赖注入、面向切面编程、事务管理、数据访问以及Web应用...

    Spring入门级教程.pptx

    Spring入门级教程,从零开始教你认识Spring,了解Spring,理解Spring的两大核心IoC和AOP,教你如何使用Spring进行开发

    Spring从入门到精通

    #### 二、Spring入门指南 - **建立Spring开发环境:** - **下载JDK:** Java Development Kit (JDK) 是必需的,因为它提供了Java应用程序运行所需的环境。 - **安装JDK:** 安装JDK后,需要配置环境变量Path和...

    Spring项目IOC入门案例、Spring项目DI入门案例的代码

    本文将深入探讨Spring的核心概念——依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IOC),并结合提供的"Spring项目IOC入门案例、Spring项目DI入门案例的代码"进行详细解析。...

    spring入门介绍PPT.rar

    Spring框架是中国Java开发领域中最广泛使用的轻量级框架之一,它以其依赖注入...这份"spring入门介绍PPT"将是你深入理解Spring的宝贵资源,通过它,你可以逐步掌握Spring的核心理念和技术,开启你的Spring开发之旅。

Global site tag (gtag.js) - Google Analytics