语言学习中庸俗而又不可或缺的一步: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
分享到:
相关推荐
在Spring框架中,事务管理是核心功能之一,它允许开发者以声明式或编程式的方式控制应用程序中的事务。本文将深入探讨`PlatformTransactionManager`接口,它是Spring提供的一个关键组件,用于处理不同类型的事务管理...
面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——...
Spring框架_day02笔记 Spring框架是Java平台上一个开源的应用程序框架,用于开发企业级应用程序。该框架提供了一个以Bean为中心的配置文件,并提供了依赖注入(Dependency Injection,DI)机制来管理应用程序中的...
"spring_day01"这个主题很显然是关于Spring框架的基础学习内容。在这个压缩包中,可能包含了第一天学习Spring时需要掌握的基本概念和实践操作。下面将详细阐述Spring框架的核心知识点及其优势。 1. **IoC...
"spring_day02"这个标题可能表示我们正在深入学习Spring框架的第二天内容,着重于Spring的核心特性和实际应用。 首先,Spring的核心组件包括IoC(Inversion of Control,控制反转)容器和AOP(Aspect-Oriented ...
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等...
- **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-Day02 学习指南 #### 一、学习目标 - **掌握Spring中的常用注解**:了解并能够运用这些注解进行项目开发。 - **了解Spring中的新注解**:熟悉新引入的注解及其应用场景。 - **自主完成Spring与JUnit的...
根据给定的文件信息,我们可以深入探讨Java Spring框架与SSH(Struts2、Spring、Hibernate)整合的关键知识点,以及如何通过具体案例掌握这些技术的应用。 ### 知识点一:SSH整合_方案01 #### 描述: SSH整合方案...
在IT行业中,Spring框架是Java开发中的一个核心组件,尤其在企业级应用开发中占据了重要地位。本项目"springday02"主要关注的是Spring框架的核心特性之一——依赖注入(Dependency Injection,简称DI)。依赖注入是...
《Spring框架2016版深度解析——基于黑马程序员_day2》 在Java开发领域,Spring框架无疑是最为广泛使用的轻量级应用框架之一。2016年,黑马程序员发布的Spring框架教程针对day2部分,深入讲解了该框架的核心概念和...
### Spring Security与Spring Boot集成详解 #### 一、Spring Security简介 Spring Security 是一个功能强大的安全框架,它为基于 Java 的应用程序提供了身份验证(authentication)、授权(authorization)、CSRF ...
Spring的配置以及依赖注入。 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。
标题中的"spring_day05_spring_"表明这是一个关于Spring框架的学习资源,可能是一个课程或教程的第五天内容,重点在于深入理解Spring的核心概念和技术。描述中的"heima spring source code day 05"暗示我们这天的...
在本课程"day02-SpringCloud02"中,我们将深入探讨Spring Cloud这一微服务框架的第二日学习内容。Spring Cloud是Java开发者广泛使用的工具,用于构建分布式系统中的服务发现、配置管理、断路器、智能路由、微代理、...
标题中的"spring_day06_spring_"表明这是关于Spring框架的第六天学习内容,而描述中的"heima source code day 06"暗示我们将探讨的是有关Heima(可能是一个项目或公司的名称)的源代码,这与Spring框架的集成或者在...
这是黑马最新用idea录制的Spring框架的视频讲解源码资料,方便初学者快速入门,更快了解Spring5的特性。
在这个"spring4_day01"的压缩包中,我们很可能是找到了一个关于 Spring 4.x 版本的基础学习案例。 首先,让我们深入理解 Spring 的核心概念: 1. **依赖注入(Dependency Injection, DI)**:这是 Spring 最为人所...
在"day39-Spring 06-Spring的AOP:带有切点的切面"这个主题中,我们将深入探讨如何在Spring中实现带有切点的切面,以及它们如何与源码和工具结合使用。 首先,理解AOP的基本概念非常重要。AOP的核心是切面(Aspect...