`
prodream
  • 浏览: 105593 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用Spring编写第一个程序-spring初级体验

阅读更多

对最原始的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_2021.7.14.zip

    这部分可能会介绍如何创建第一个Spring应用,包括引入Spring库,创建bean定义,以及如何启动和使用Spring容器。 综合来看,这份"spring_2021.7.14.zip"压缩包提供了Spring框架的初级到中级的学习资源,涵盖了从基础...

    Spring Boot技术培训

    Spring Boot 是基于 Spring 平台和一系列框架的项目,旨在简化新 Spring 应用程序的初始设置和配置。Spring Boot 的目标是通过提供一种可快速构建独立、生产级别的基于 Spring 框架的应用程序的方式来消除繁重的手动...

    spring-boot学习文档

    3. **创建第一个Spring Boot应用**:通过一个简单的“Hello, World!”示例,展示如何创建一个新的Spring Boot项目,包括使用Spring Initializr和构建工具如Maven或Gradle。 4. **内置服务器**:讲解Spring Boot如何...

    Spring Boot 培训教程介绍1

    2. **开发环境配置与Hello World**:快速搭建开发环境,编写第一个"Hello World"程序,让学员熟悉Spring Boot的初始化流程。 3. **数据库、事务和Web开发**:涵盖如何使用Spring Boot与关系型数据库(如MySQL)进行...

    spring in action

    《Spring in Action》第一版就获得了来自业界的高度评价: - **Computing Reviews**称赞其不仅是一本优秀的Spring教程,还涵盖了大量关于良好软件设计和设计模式的理念。 - **Internet Bookwatch**认为本书覆盖了...

    SpringBoot技术分享(培训ppt文档).pptx

    要快速构建一个Spring Boot项目,首先可以访问Spring Boot的官方网站或使用IDEA中的Spring Initializr。这里提供了众多启动器,涵盖了40多种功能,如web开发、数据访问等。这些启动器帮助集中管理jar包,避免版本...

    基于Spring Boot的简单Java爬虫.zip

    这意味着这个项目可能是一个使用Spring Boot构建的、便于理解和实现的初级网络爬虫程序。 【描述解析】 描述中的“基于Spring Boot的简单Java爬虫”是对标题的进一步确认,它暗示了我们将学习如何在Spring Boot环境...

    springboot-helloworld.rar

    SpringBoot HelloWorld 示例是一个针对初级Java开发者的学习资源,它利用Spring Boot框架进行基础配置,并展示了如何构建一个简单的应用程序。Spring Boot是Spring生态系统中的一个重要组件,它旨在简化Spring应用的...

    spring帮助文档

    "Spring框架快速入门之简介.doc"提供了Spring的基本介绍,包括安装、设置环境以及编写第一个Spring应用的步骤,是快速上手的好资料。 "Spring基础与实践.ppt"深入浅出地介绍了Spring的基础知识,包括MVC、数据访问...

    零基础学Java_Web开发:JSP+Servlet+Struts+Spring+Hibernate+Ajax

    第十三章和第十七章的PPT分别深入解析了Struts的使用和Struts与Spring、Hibernate的整合,展示了如何有效地管理应用程序的流程和控制。 6. **Spring**: Spring是一个全面的Java企业级应用框架,支持依赖注入、AOP...

    如何成为一名Java初级程序员

    成为一名Java程序员的第一步是设置你的开发环境。这通常包括安装Java Development Kit (JDK),它是Java开发的基础,提供了编译、运行和调试Java应用程序所需的所有工具。此外,集成开发环境(IDE)如Eclipse、IntelliJ...

    primeiro-projeto-spring-boot

    这个项目的目的是帮助开发者快速启动他们的第一个Spring Boot应用。 在描述中,“primeiro-projeto-spring-boot”再次强调了这是一个入门级的项目,可能包含了从零开始搭建Spring Boot应用的基本步骤。通常,这样的...

    java初级程序员视频教程整套下载地址

    安装JDK是进行Java编程的第一步。 - **IDEA配置**:IntelliJ IDEA是一款非常流行的Java集成开发环境(IDE),支持代码编写、调试、测试等多种功能。初学者可以通过配置IDEA来提高开发效率。 - **Eclipse使用**:...

    JAVA资源初级教程源代码

    "JAVA资源初级教程源代码" 这个标题表明了这是一个针对初学者的Java编程教学资源,包含了源代码。这里的源代码通常指的是用Java语言编写的程序或应用,供学习者参考和实践。初级教程意味着它将涵盖Java编程的基础...

    java-springboot本地助农产品销售系统毕业设计程序 (2).zip

    标题中的“java-springboot本地助农产品销售系统毕业设计程序”揭示了这是一个使用Java和Spring Boot框架开发的软件项目,其目标是构建一个用于助农产品销售的在线平台。这个系统可能包含了用户管理、商品管理、订单...

    wicket-kurs:使用 Spring 进行 Wicket 课程的基本起点

    标题“wicket-kurs:使用 Spring 进行 Wicket 课程的基本起点”和描述“检票口 使用 Spring 进行 Wicket 课程的基本起点”暗示了这是一个关于结合 Wicket 和 Spring 的初级教程,旨在帮助开发者迈出学习的第一步。...

    springboot经典资源1

    这些资料可能会逐步引导学习者理解SpringBoot的各个核心概念,例如如何创建第一个SpringBoot应用、如何编写Controller、如何配置数据库连接、如何使用Spring Data JPA进行数据操作等。此外,还可能涉及到如何集成...

    博和利J2EE初级培训 PPT

    此外,第一讲可能还会讲解开发环境的搭建,如使用Apache Tomcat或GlassFish服务器,以及如何编写第一个简单的J2EE应用。 第二讲“博和利初级培训第二讲.ppt”可能会进一步深入到Web层组件,如Servlet和JSP。Servlet...

    struts2项目使用的初级常用jar包

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展且易于管理的企业级应用程序。这个压缩包包含了一些Struts2框架在初级阶段开发时所必需的基础jar包。以下将详细解释这些jar包及其在Struts2项目中的作用...

    尚硅谷springboot视频教程(上、下)

    - **创建项目**:基于Spring Boot创建一个简单的Web应用。 - **编写代码**: - 创建Controller类,如`HelloController`,使用`@RestController`注解。 - 定义方法返回字符串,例如:`@GetMapping("/hello") public...

Global site tag (gtag.js) - Google Analytics