【实例1】example01:
FileHelloStr类
package com.coderdream.spring;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* 基于文件形式,读取 HelloWorld 所需的字符串
*
* @author CoderDream
*
*/
public class FileHelloStr {
protected static final Log log = LogFactory.getLog(FileHelloStr.class);
private String propfilename;
public FileHelloStr(String propfilename) {
this.propfilename = propfilename;
}
public String getContent() {
String helloworld = "";
try {
Properties prop = new Properties();
InputStream is = getClass().getClassLoader().getResourceAsStream(
propfilename);
prop.load(is);
is.close();
helloworld = prop.getProperty("helloworld");
} catch (FileNotFoundException ex) {
log.error(ex);
} catch (IOException ex) {
log.error(ex);
}
return helloworld;
}
}
HelloWorld类:
package com.coderdream.spring;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* 获得 HelloWorld 字符串
*
* @author CoderDream
*
*/
public class HelloWorld {
protected static final Log log = LogFactory.getLog(HelloWorld.class);
public String getContent() {
FileHelloStr fhStr = new FileHelloStr("helloworld.properties");
String helloworld = fhStr.getContent();
return helloworld;
}
}
HelloWorldClient类,实现对HelloWorld类的调用:
package com.coderdream.spring;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* HelloWorld 客户应用
*
* @author CoderDream
*
*/
public class HelloWorldClient {
protected static final Log log = LogFactory.getLog(HelloWorldClient.class);
/**
* @param args
*/
public static void main(String[] args) {
HelloWorld hw = new HelloWorld();
log.info(hw.getContent());
}
}
HelloWorld.properties文件:
helloworld="Hello World!"
build.xml:(注意,如果工程为UTF-8,则build.xml的编码格式要设置为UTF-8,否则会以本地格式编译,如果为繁体中文OS,则编码格式为MS950,如果Java文件中有简体中文字符,则编译会出错!
)
<?xml version="1.0" encoding="UTF-8" ?>
<project name="example01" default="run" basedir=".">
<path id="lib">
<fileset dir="F:/Java/MasterSpringLib">
<include name="commons-logging-1.1.1.jar" />
</fileset>
</path>
<target name="run" depends="compile" description="Run HelloWorldClient">
<java classname="com.coderdream.spring.HelloWorldClient" fork="yes">
<classpath refid="lib" />
<classpath path="classes" />
</java>
</target>
<target name="compile">
<mkdir dir="classes" />
<javac destdir="classes" source="1.5" target="1.5" deprecation="false" optimize="false" failonerror="true">
<src path="src" />
<classpath refid="lib" />
</javac>
<copy todir="classes">
<fileset dir="src">
<include name="HelloWorld.properties" />
</fileset>
</copy>
</target>
</project>
通过Ant build.xml 文件的 run 任务,输出如下信息:
Buildfile: C:\Documents and Settings\XL\workspace\example01\build.xml
compile:
[javac] Compiling 1 source file to C:\Documents and Settings\XL\workspace\example01\classes
run:
[java] 2008/10/13 下午 03:50:32 com.coderdream.spring.HelloWorldClient main
[java] 資訊: "Hello World!"
BUILD SUCCESSFUL
Total time: 1 second
【实例2】example02
对“实例1”进行重构:
【1】、创建 HelloStr 接口,该接口包含getContent()方法的声明;
【2】、类 FileHelloStr 实现 HelloStr 接口;
【3】、重构 HelloWorld 类;
public class HelloWorld {
protected static final Log log = LogFactory.getLog(HelloWorld.class);
private HelloStr hStr;
public HelloWorld(HelloStr hStr) {
this.hStr = hStr;
}
public String getContent() {
return hStr.getContent();
}
}
【4】、重构 HelloWorldClient 客户应用;
public class HelloWorldClient {
protected static final Log log = LogFactory.getLog(HelloWorldClient.class);
/**
* @param args
*/
public static void main(String[] args) {
FileHelloStr fhStr = new FileHelloStr("HelloWorld.properties");
HelloWorld hw = new HelloWorld(fhStr);
log.info(hw.getContent());
}
}
【实例3】:example03
在“实例2”的基础上完成如下重构:
【1】、创建 HelloWorldFactory 工厂:
package com.coderdream.spring;
/**
* 注入 HelloWorld 和 HelloStr 依赖性
*
* @author CoderDream
*
*/
public class HelloWorldFactory {
public static HelloWorld getFileHelloWorld() {
HelloStr hStr = new FileHelloStr("HelloWorld.properties");
HelloWorld hw = new HelloWorld(hStr);
return hw;
}
}
【2】重构 HelloWorldClient 客户应用;
public class HelloWorldClient {
protected static final Log log = LogFactory.getLog(HelloWorldClient.class);
/**
* @param args
*/
public static void main(String[] args) {
HelloWorld hw = HelloWorldFactory.getFileHelloWorld();
log.info(hw.getContent());
}
}
其中,工厂负责创建和集成客户应用所需的对象,至此,通过借助于依赖注入(工厂类)实现控制反转。
【实例4】example04
在“实例3”的基础上完成如下重构:
【1】增加 Spring 配置文件 appcontent.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 name="fileHelloWorld"
class="com.coderdream.spring.HelloWorld">
<constructor-arg>
<ref bean="fileHello" />
</constructor-arg>
</bean>
<bean name="fileHello" class="com.coderdream.spring.FileHelloStr">
<constructor-arg>
<value>HelloWorld.properties</value>
</constructor-arg>
</bean>
</beans>
【2】重构 HelloWorldClient 客户应用:
public class HelloWorldClient {
protected static final Log log = LogFactory.getLog(HelloWorldClient.class);
public HelloWorldClient() {
Resource resource = new ClassPathResource("appcontext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
HelloWorld hw = (HelloWorld)factory.getBean("fileHelloWorld");
log.info(hw.getContent());
}
/**
* @param args
*/
public static void main(String[] args) {
new HelloWorldClient();
}
}
【3】更新build.xml中的内容:
<?xml version="1.0" encoding="UTF-8"?>
<project name="example01" default="run" basedir=".">
<path id="lib">
<fileset dir="F:/Java/MasterSpringLib">
<include name="commons-logging-1.1.1.jar" />
<include name="spring.jar" />
</fileset>
</path>
<target name="run" depends="compile" description="Run HelloWorldClient">
<java classname="com.coderdream.spring.HelloWorldClient" fork="yes">
<classpath refid="lib" />
<classpath path="classes" />
</java>
</target>
<target name="compile">
<mkdir dir="classes" />
<javac destdir="classes" source="1.5" target="1.5" deprecation="false"
optimize="false" failonerror="true">
<src path="src" />
<classpath refid="lib" />
</javac>
<copy todir="classes">
<fileset dir="src">
<include name="HelloWorld.properties" />
<include name="appcontext.xml" />
</fileset>
</copy>
</target>
</project>
运行结果:
Buildfile: C:\Documents and Settings\XL\workspace\example04\build.xml
compile:
run:
[java] 2008/10/13 下午 04:06:52 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
[java] 資訊: Loading XML bean definitions from class path resource [appcontext.xml]
[java] 2008/10/13 下午 04:06:52 org.springframework.beans.factory.support.AbstractBeanFactory getBean
[java] 資訊: Creating shared instance of singleton bean 'fileHelloWorld'
[java] 2008/10/13 下午 04:06:52 org.springframework.beans.factory.support.AbstractBeanFactory getBean
[java] 資訊: Creating shared instance of singleton bean 'fileHello'
[java] 2008/10/13 下午 04:06:52 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory autowireConstructor
[java] 資訊: Bean 'fileHello' instantiated via constructor [public com.coderdream.spring.FileHelloStr(java.lang.String)]
[java] 2008/10/13 下午 04:06:52 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory autowireConstructor
[java] 資訊: Bean 'fileHelloWorld' instantiated via constructor [public com.coderdream.spring.HelloWorld(com.coderdream.spring.HelloStr)]
[java] 2008/10/13 下午 04:06:52 com.coderdream.spring.HelloWorldClient <init>
[java] 資訊: "Hello World!"
BUILD SUCCESSFUL
Total time: 891 milliseconds
通过Spring输出信息可知,工程创建了两个单实例的HelloWorld 和 FileHelloStr,即 Spring 默认时仅创建单实例的 JavaBean,通过 Spring 配置文件中 bean 元素的 singleton 属性能够控制创建 Java 实例的方式。
源代码运行:
在F盘新增F:\Java\MasterSpringLib文件夹,将commons-logging-1.1.1.jar和spring.jar拷贝到此目录中。
分享到:
相关推荐
读书笔记:精通Spring MVC 4
- **一站式服务**:Spring框架不仅可以整合各种企业应用的开源框架和优秀的第三方类库,还提供了丰富的项目支持,几乎可以满足所有企业级应用的需求。 #### 二、Spring模块组成 Spring框架由多个模块组成,每个...
传智博客Spring框架2016版笔记资料 传智博客Spring框架2016版笔记资料 传智博客Spring框架2016版笔记资料 传智博客Spring框架2016版笔记资料 传智博客Spring框架2016版笔记资料
总的来说,"精通Spring:教程"和"精通Hibernate:精通Spring:教程"旨在帮助开发者深入了解这两个重要框架,并掌握它们在实际项目中的应用,提升Java开发的专业技能。通过深入学习和实践,你将能够有效地利用Spring...
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
【尚硅谷SpringCloud第二季笔记】是一份详细记录了SpringCloud组件使用的学习笔记,涵盖了SpringCloud在云原生环境下的核心概念和实践应用。SpringCloud是基于Spring Boot实现的微服务框架,它提供了构建分布式系统...
1. **Spring框架概述**:Spring框架是一个模块化的开源框架,主要由Core Container、Data Access/Integration、Web、AOP、Instrumentation、MVC等模块组成。它提倡“轻量级”概念,旨在降低Java EE应用的复杂性。 2...
读书笔记:spring cloude 微服务实战笔记
读书笔记:Spring Cloud 微服务实战笔记
读书笔记:spring boot 实战学习笔记 1
《精通Spring 4.X:企业应用开发实战精通》是一本由陈雄华编著的书籍,专注于Spring 4.x框架的深度解析与实践应用。Spring作为Java领域最流行的应用框架,其4.x版本在功能、性能和易用性上都有显著提升。这本书详细...
精通Spring 4.x 企业应用开发实战 高清完整版PDF书及随书源码。 精通Spring 4.x 企业应用开发实战 高清完整版PDF书及随书源码 Spring 4.0是Spring在积蓄4年后,隆重推出的一个重大升级版本,进一步加强了Spring作为...
1. **Spring概述**:Spring是一个开源的Java平台,提供了一个全面的基础设施,支持创建企业级应用。它的核心特性包括依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP),这...
3. **Web**:Spring MVC是Spring提供的Web开发模型,它提供了一个用于构建可测试、松耦合Web应用的模型。此外,Spring Web Flow用于构建复杂的用户交互流程。 4. **AOP**:面向切面编程允许我们定义“切面”,即...
读书笔记:spring boot实战第8章 redis
《精通Spring4.x企业应用开发实战》是一本深入解析Spring框架在企业级应用中的实践指南。这本书涵盖了Spring框架的核心概念、重要特性和实际应用,旨在帮助开发者熟练掌握Spring4.x版本的各种开发技能,以提高软件...
读书笔记:Spring Boot 实战笔记
《精通 Spring Boot 42 讲》共分五大部分,第一部分是从零起步的基础内容,共4课,帮助大家快速认识 Spring Boot ,我会带领大家熟悉 Spring Boot 产生的背景和设计理念,同时也会讲解 Spring Boot 的环境搭建和项目...
1.精通Spring 4.x 企业应用开发实战精通Spring 4.x 企业应用开发实战精通Spring 4.x 企业应用开发实战精通Spring 4.x 企业应用开发实战精通Spring 4.x 企业应用开发实战精通Spring 4.x 企业应用开发实战精通Spring 4...