`
liaofeng_xiao
  • 浏览: 127484 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring day by day---day one

阅读更多
语言学习中庸俗而又不可或缺的一步:Hello,World!

看看如何使用IOC实现Hello World,正所谓旧瓶装新酒


1、需求:C语言中的Hello World是printf("Hello,World!"),在这里考虑输出的可变性---即printf,在Java中可以是日志输入,控制台输出,也可以是err输出,由此我们提取一个接口MessageGender用于封装这种可变性;另外,输出的内容,即“Hello,World“也是经常改变的,亦可提取出一个接口MessageProvider,它提供一个方法返回消息(在这里也就是字符串)供MessageGender进行输出处理。MessageGender拥有一个MessageProvider的成员对象和一个方法用于显示通过MessageProvider对象获得的消息。两个类分别提供了实现类MessageProviderImpl和MessageGenderImpl。关系图在附件中呈现,下面呈现代码:

接口MessageProvider:

package org.liaofeng.model; 

public interface MessageProvider { 
    String getMessage(); //用于获得消息的接口
} 


接口MessageGender:

package org.liaofeng.model;

public interface MessageGender {
	void gender();//用于处理消息的方法
}


MessageProviderImpl类:

package org.liaofeng.model;

public class MessageProviderImpl implements MessageProvider{
	private String information;//具体的消息对象
	public void setInformation(String information) {
		this.information = information;
	}
	@Override
	public String getMessage() {
		return this.information;
	}
}


MessageGenderImpl类:

package org.liaofeng.model;

public class MessageGenderImpl implements MessageGender{
	private MessageProvider provider;

    //Spring容器通过该setter进行依赖注入
    public void setProvider(MessageProvider provider) {
		this.provider = provider;
	}
	@Override
	public void gender() {//具体的消息处理方法
		System.out.println(provider.getMessage());
	}
	
}


           


2、怎样体现IOC:MessageGender需要显示消息,必须先通过成员对象MessageProvider的getMessage()方法先获得消息,这就是一种依赖关系。在传统的Java程序实现中,这种依赖关系体现在MessageProviderImpl要获得MessageGenderImpl,就得通过new自行创建,一般MessageGenderImpl中存在类似的代码实现:
MessageGender gender = new MessageGenderImpl();

这也就产生了一种耦合关系。IOC即Inversion Of Control,意思是控制反转,提供了解耦合的方法。“控制反转”意即将原来程序中的组件(或者说对象)之间依赖关系交由容器进行建立,并由容器负责组建(对象)的生命周期。

3、怎样通过Spring的BeanFactory获得依靠容器管理的对象:
package org.liaofeng.main;

import org.liaofeng.model.MessageGender;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;

public class Main {
	public static void main(String[] args){
		XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource("src/applicationContext.xml"));
		MessageGender gender = (MessageGender)factory.getBean("gender");
		gender.gender();
	}
}


从此“脱离”了工厂模式....

4、Spring配置文件:
<?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-2.5.xsd">
	<bean id="provider" class="org.liaofeng.model.MessageProviderImpl">
		<property name="information" value="hello,world!"></property>
	</bean>
	<bean id="gender" class="org.liaofeng.model.MessageGenderImpl">
		<property name="provider" ref="provider"></property>
	</bean>
</beans>



总结:个人博文之处女作,只涉及了怎么做而未涉及到底层实现原理,甚至连一些必要的知识扩展都没能做到,真正意义上的"Hello,World!"....
  • 大小: 5.9 KB
6
1
分享到:
评论
2 楼 20055294 2010-04-13  
期待 day  two 啊!
1 楼 飞林沙 2010-04-03  
先顶一个....
加油写

相关推荐

    spring_day04

    在Spring框架中,事务管理是核心功能之一,它允许开发者以声明式或编程式的方式控制应用程序中的事务。本文将深入探讨`PlatformTransactionManager`接口,它是Spring提供的一个关键组件,用于处理不同类型的事务管理...

    day34-spring--day02.zip

    面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——...

    spring--day02笔记.doc

    Spring框架_day02笔记 Spring框架是Java平台上一个开源的应用程序框架,用于开发企业级应用程序。该框架提供了一个以Bean为中心的配置文件,并提供了依赖注入(Dependency Injection,DI)机制来管理应用程序中的...

    spring_day01

    "spring_day01"这个主题很显然是关于Spring框架的基础学习内容。在这个压缩包中,可能包含了第一天学习Spring时需要掌握的基本概念和实践操作。下面将详细阐述Spring框架的核心知识点及其优势。 1. **IoC...

    spring_day02

    "spring_day02"这个标题可能表示我们正在深入学习Spring框架的第二天内容,着重于Spring的核心特性和实际应用。 首先,Spring的核心组件包括IoC(Inversion of Control,控制反转)容器和AOP(Aspect-Oriented ...

    spring练习项目.7z

    proxy,jdkproxy-transaction,jdkproxy-salary,day02-itheima11-spring-08-cglibproxy,day02-itheima11-spring-09-aop.xml,day02-itheima11-spring-10-aop.xml.advice,day02-itheima11-spring-11-aop.xml.exception等...

    spring-day01

    - **Rod Johnson**:Spring框架的创始人,在2002年出版了《Expert One-to-One J2EE Design and Development》,讨论了J2EE使用EJB的优点及解决方案;在2004年出版了《Expert One-to-One J2EE Development without ...

    Spring-day01-课堂笔记.md

    Spring-day01-课堂笔记.md

    spring-day02

    ### Spring-Day02 学习指南 #### 一、学习目标 - **掌握Spring中的常用注解**:了解并能够运用这些注解进行项目开发。 - **了解Spring中的新注解**:熟悉新引入的注解及其应用场景。 - **自主完成Spring与JUnit的...

    java_spring_day04.pdf

    根据给定的文件信息,我们可以深入探讨Java Spring框架与SSH(Struts2、Spring、Hibernate)整合的关键知识点,以及如何通过具体案例掌握这些技术的应用。 ### 知识点一:SSH整合_方案01 #### 描述: SSH整合方案...

    springday02

    在IT行业中,Spring框架是Java开发中的一个核心组件,尤其在企业级应用开发中占据了重要地位。本项目"springday02"主要关注的是Spring框架的核心特性之一——依赖注入(Dependency Injection,简称DI)。依赖注入是...

    黑马程序员Spring框架2016版资料_day2

    《Spring框架2016版深度解析——基于黑马程序员_day2》 在Java开发领域,Spring框架无疑是最为广泛使用的轻量级应用框架之一。2016年,黑马程序员发布的Spring框架教程针对day2部分,深入讲解了该框架的核心概念和...

    SpringSecurity_day03.pdf

    ### Spring Security与Spring Boot集成详解 #### 一、Spring Security简介 Spring Security 是一个功能强大的安全框架,它为基于 Java 的应用程序提供了身份验证(authentication)、授权(authorization)、CSRF ...

    spring--day01笔记.doc

    Spring的配置以及依赖注入。 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。

    spring_day05_spring_

    标题中的"spring_day05_spring_"表明这是一个关于Spring框架的学习资源,可能是一个课程或教程的第五天内容,重点在于深入理解Spring的核心概念和技术。描述中的"heima spring source code day 05"暗示我们这天的...

    day02-SpringCloud02

    在本课程"day02-SpringCloud02"中,我们将深入探讨Spring Cloud这一微服务框架的第二日学习内容。Spring Cloud是Java开发者广泛使用的工具,用于构建分布式系统中的服务发现、配置管理、断路器、智能路由、微代理、...

    spring_day06_spring_

    标题中的"spring_day06_spring_"表明这是关于Spring框架的第六天学习内容,而描述中的"heima source code day 06"暗示我们将探讨的是有关Heima(可能是一个项目或公司的名称)的源代码,这与Spring框架的集成或者在...

    spring_day01.zip

    这是黑马最新用idea录制的Spring框架的视频讲解源码资料,方便初学者快速入门,更快了解Spring5的特性。

    spring4_day01.7z

    在这个"spring4_day01"的压缩包中,我们很可能是找到了一个关于 Spring 4.x 版本的基础学习案例。 首先,让我们深入理解 Spring 的核心概念: 1. **依赖注入(Dependency Injection, DI)**:这是 Spring 最为人所...

    day39-Spring 06-Spring的AOP:带有切点的切面

    在"day39-Spring 06-Spring的AOP:带有切点的切面"这个主题中,我们将深入探讨如何在Spring中实现带有切点的切面,以及它们如何与源码和工具结合使用。 首先,理解AOP的基本概念非常重要。AOP的核心是切面(Aspect...

Global site tag (gtag.js) - Google Analytics