对最原始的HelloWorld.java写法分析:
一个HelloWorld有两个职责,一个是获得外部参数,另一个决定如何显示
第一次改进:分离职能
//消息显示者接口
MessageDisplayer.java
package prodream.com
public interface MessageSupplice{
public void setMessageSupplice(Message supplier);
public void display();
}
//实现MessageDisplayer接口
ConcreteMessageDisplayer.java
package prodream.com
public class ConreteMessageDisplayer{
private MessageSupplier suppier;
public void setMessageSupplier(MessageSupplier supplier){
this.supplier=supplier;
}
public void display(){
if(supplier==nul)
throw new RuntimeException();
System.out.println(supplier.getMessage());
}
}
//消息提供者接口
MessageSupplier.java
package prodream.com;
public interface MessageSupplier{
String getMessage();
}
//实现MessageSupplier接口
HelloWorldMessageSupplier.java
public class HelloWorldMessageSupplier{
public String getMessage(){
return "Hello World";
}
}
//主程序
HelloWorld.java:
public class HelloWorld{
public static void main(String[] args){
//创建消息提供者
MessageSupplier msgSupplier=new HelloWorldMessageSupplier();
//创建消息显示者
MessageDisplayer msgDisplayer=new ConcreteMessageDisplayer();
//注入消息提供者
msgDisplayer.setMessageSupplier(msgSupplier);
//显示相应信息
msgDisplayer.display();
}
分析:如果希望替换MessageDisplayer或者MessageSupplier的实现类,那么需要修改主程序中手动更改,那么运用程序代码又将经历编译测试的风险。
解决方法是通过外部的属性文件来读取相应实例类的名字
//我觉得这样不能体现什么大的价值,正如有写对spring的注入式的分析中写的一样,这种依赖转向对配置文件的依赖
再次改进:引入单例工厂
MessageSupportFactoruy.java:
package prodream.com;
import java.io.FileInputStream;
import java.util.Properties;
public class MessageSupportFactory{
private static MessageSupportFactory instance=null;
privateProperties props=null;
public synchronized static MessageSupportFactory getInstance(){
if(instance==null)
instance=new MessageSupportFactory();
return instance;
public MessageSupportFactory(){
props=new Properties();
try{
props.load(new FileInputStream("conf/msgbean.properties");
}
catch(Exception ex){
ex.printStackTrace();
}
}
public MessageDisplayer makeDisplayer(){
String displayClass=props.getProperty("displayer.class");
try{
return (MessageDisplayer) Class.forName(disaplayerClass).newInstance();
}
catch(ClassNotFoundException e){
System.out.println("Could't found class:" +displayClass);
}
catch(InstaniationException e){
System.out.println("Couldn't instaniate an object of type:" +displayerClass);
}
catch(IllegalAccessException e){
System.out.println("couldn't access class:"+displayerClass);
}
return null;
}
public MessageSupplier makeSupplier(){
String supplierClass=props.getProperty("supplier.class");
try{
return (MessageSupplierr) Class.forName(supplierClass).newInstance();
}
catch(ClassNotFoundException e){
System.out.println("Could't found class:" +supplierClass);
}
catch(InstaniationException e){
System.out.println("Couldn't instaniate an object of type:" +supplierClass);
}
catch(IllegalAccessException e){
System.out.println("couldn't access class:"+supplierClass);
}
return null;
}
}
vmsbean.properties的内容:
displayer.class=prodream.com.ConcreteMessageDiaplayer
supplier.class=prodream.com.HelloWorldSupplier
//主程序
HelloWorldWithFactory.java:
public class HelloWorldWithFactory{
public static void main(String[] args){
//创建消息提供者
MessageSupplier msgSupplier=MessageSupportFactory.getInstance().makeSupplier();
//创建消息显示者
MessageDisplayer msgDisplayer=MessageSupportFactory.getInstance().makeDisplayer();
//注入消息提供者
msgDisplayer.setMessageSupplier(msgSupplier);
//显示相应信息
msgDisplayer.display();
}
引入了工厂抽离了部分类实例化的硬编码(hard code,简单说就是一种代码不灵活的体现看他们往往可以通过外部设置,设计模式,重构等手段来解决)
。。
。
。
。
。
发表评论
-
spring-MessageSource
2010-05-05 15:41 1715将Spring自带的org.springframework.c ... -
spring的扩展点--PropertyPlaceholderConfigurer
2010-05-05 14:01 1071它的作用是一个资源属性的配置器,能够将BeanFactory的 ... -
ApplicationContextAware
2010-03-30 14:36 1149JDK-doc 2.5.6 Interface Applic ... -
org.springframework.beans.factory.BeanCreationException: Error creating bean wit
2010-01-24 18:45 3813org.springframework.beans.facto ... -
SPRING框架的7大模块
2008-08-23 16:48 983核心容器:核心容器 ... -
Spring中BeanFactory配置文件的元素解析
2008-08-24 11:39 739<?xml version="1.0" ... -
使用Lookup方法注射方法
2008-08-24 17:46 689spring方法解决下面的问题:一个singleton bea ... -
替换任意的方法
2008-08-24 18:06 827在spring中不但提供了Lookup方法来注射方法,还提供了 ... -
一个普通表单控制器(SimpleFornController)处理视图流转的例子
2008-08-26 09:40 779Spring附有一些简单的窗体处理handler,这些hand ... -
SimpleFormController简单表单控制器的处理流程
2008-08-26 10:19 8711.当表单控制器接 ... -
SPRING分发器(DispatcherServlet)
2008-09-09 00:15 1357分发器(DispatcherServlet) Sprin ... -
Spring的View和ViewResolver的使用
2008-09-11 23:15 1527打开Spring的源代码,我们可以在org.springfra ... -
ModelAndView解析
2008-09-16 09:39 1265查看spring的帮助文档得到以下信息: org.sprin ... -
spring验证器Validator接口
2008-09-16 21:30 2626spring2.0 Validator接口 ... -
spring web mvc配置
2008-09-17 11:04 1124spring内建一个请求驱动 ... -
spring视图解析器
2008-09-17 15:21 1344spring最常用的JSP/JSTL视图解析器是: Int ... -
Spring dataSource配置
2010-01-23 13:40 1814不管通过何种持久化 ... -
AOP(Aspect Oriented Programming ) 面向切面编程
2010-01-23 13:38 832AOP是什么? AOP是OO ...
相关推荐
这部分可能会介绍如何创建第一个Spring应用,包括引入Spring库,创建bean定义,以及如何启动和使用Spring容器。 综合来看,这份"spring_2021.7.14.zip"压缩包提供了Spring框架的初级到中级的学习资源,涵盖了从基础...
Spring Boot 是基于 Spring 平台和一系列框架的项目,旨在简化新 Spring 应用程序的初始设置和配置。Spring Boot 的目标是通过提供一种可快速构建独立、生产级别的基于 Spring 框架的应用程序的方式来消除繁重的手动...
3. **创建第一个Spring Boot应用**:通过一个简单的“Hello, World!”示例,展示如何创建一个新的Spring Boot项目,包括使用Spring Initializr和构建工具如Maven或Gradle。 4. **内置服务器**:讲解Spring Boot如何...
2. **开发环境配置与Hello World**:快速搭建开发环境,编写第一个"Hello World"程序,让学员熟悉Spring Boot的初始化流程。 3. **数据库、事务和Web开发**:涵盖如何使用Spring Boot与关系型数据库(如MySQL)进行...
《Spring in Action》第一版就获得了来自业界的高度评价: - **Computing Reviews**称赞其不仅是一本优秀的Spring教程,还涵盖了大量关于良好软件设计和设计模式的理念。 - **Internet Bookwatch**认为本书覆盖了...
要快速构建一个Spring Boot项目,首先可以访问Spring Boot的官方网站或使用IDEA中的Spring Initializr。这里提供了众多启动器,涵盖了40多种功能,如web开发、数据访问等。这些启动器帮助集中管理jar包,避免版本...
这意味着这个项目可能是一个使用Spring Boot构建的、便于理解和实现的初级网络爬虫程序。 【描述解析】 描述中的“基于Spring Boot的简单Java爬虫”是对标题的进一步确认,它暗示了我们将学习如何在Spring Boot环境...
SpringBoot HelloWorld 示例是一个针对初级Java开发者的学习资源,它利用Spring Boot框架进行基础配置,并展示了如何构建一个简单的应用程序。Spring Boot是Spring生态系统中的一个重要组件,它旨在简化Spring应用的...
"Spring框架快速入门之简介.doc"提供了Spring的基本介绍,包括安装、设置环境以及编写第一个Spring应用的步骤,是快速上手的好资料。 "Spring基础与实践.ppt"深入浅出地介绍了Spring的基础知识,包括MVC、数据访问...
第十三章和第十七章的PPT分别深入解析了Struts的使用和Struts与Spring、Hibernate的整合,展示了如何有效地管理应用程序的流程和控制。 6. **Spring**: Spring是一个全面的Java企业级应用框架,支持依赖注入、AOP...
成为一名Java程序员的第一步是设置你的开发环境。这通常包括安装Java Development Kit (JDK),它是Java开发的基础,提供了编译、运行和调试Java应用程序所需的所有工具。此外,集成开发环境(IDE)如Eclipse、IntelliJ...
这个项目的目的是帮助开发者快速启动他们的第一个Spring Boot应用。 在描述中,“primeiro-projeto-spring-boot”再次强调了这是一个入门级的项目,可能包含了从零开始搭建Spring Boot应用的基本步骤。通常,这样的...
安装JDK是进行Java编程的第一步。 - **IDEA配置**:IntelliJ IDEA是一款非常流行的Java集成开发环境(IDE),支持代码编写、调试、测试等多种功能。初学者可以通过配置IDEA来提高开发效率。 - **Eclipse使用**:...
"JAVA资源初级教程源代码" 这个标题表明了这是一个针对初学者的Java编程教学资源,包含了源代码。这里的源代码通常指的是用Java语言编写的程序或应用,供学习者参考和实践。初级教程意味着它将涵盖Java编程的基础...
标题中的“java-springboot本地助农产品销售系统毕业设计程序”揭示了这是一个使用Java和Spring Boot框架开发的软件项目,其目标是构建一个用于助农产品销售的在线平台。这个系统可能包含了用户管理、商品管理、订单...
标题“wicket-kurs:使用 Spring 进行 Wicket 课程的基本起点”和描述“检票口 使用 Spring 进行 Wicket 课程的基本起点”暗示了这是一个关于结合 Wicket 和 Spring 的初级教程,旨在帮助开发者迈出学习的第一步。...
这些资料可能会逐步引导学习者理解SpringBoot的各个核心概念,例如如何创建第一个SpringBoot应用、如何编写Controller、如何配置数据库连接、如何使用Spring Data JPA进行数据操作等。此外,还可能涉及到如何集成...
此外,第一讲可能还会讲解开发环境的搭建,如使用Apache Tomcat或GlassFish服务器,以及如何编写第一个简单的J2EE应用。 第二讲“博和利初级培训第二讲.ppt”可能会进一步深入到Web层组件,如Servlet和JSP。Servlet...
Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展且易于管理的企业级应用程序。这个压缩包包含了一些Struts2框架在初级阶段开发时所必需的基础jar包。以下将详细解释这些jar包及其在Struts2项目中的作用...
- **创建项目**:基于Spring Boot创建一个简单的Web应用。 - **编写代码**: - 创建Controller类,如`HelloController`,使用`@RestController`注解。 - 定义方法返回字符串,例如:`@GetMapping("/hello") public...