此例子是选择夏欣翻译的spring开发手册上的例子
在myeclipse下新建SpringFirst工程,然后添加spring能力(即添加必要的spring的jar包)
整个项目的目录结构如下:
定义一个接口
package net.xiaxin.spring.qs;
public interface Action {
public String execute(String str);
}
给出接口的两个不同实现类
package net.xiaxin.spring.qs;
public class LowerAction implements Action {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String string) {
message = string;
}
public String execute(String str) {
return (getMessage() + str).toLowerCase();
}
}
package net.xiaxin.spring.qs;
public class UpperAction implements Action {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String string) {
message = string;
}
public String execute(String str) {
return (getMessage() + str).toUpperCase();
}
}
spring配置文件applicationContext.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!--UpperAction和LowerAction的Message属性均由Spring通过读取配置文件(bean.xml)-->
<bean id="UpperAction" class="net.xiaxin.spring.qs.UpperAction">
<property name="message" value="UpperAction"></property>
</bean>
<bean id="LowerAction" class="net.xiaxin.spring.qs.LowerAction">
<!--UpperAction/LowerAction在运行前,其Message节点为空。运行
后由容器将字符串“HeLLo”注入。此时UpperAction/LowerAction即与内存中的“HeLLo”字符串对
象建立了依赖关系-->
<property name="message" value="LowerAction"></property>
</bean>
</beans>
写一个测试程序Test
package test;
import net.xiaxin.spring.qs.Action;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class Test{//spring
public static void main(String[] args){
ApplicationContext ctx=new//创建了一个ApplicationContext实例
FileSystemXmlApplicationContext("src/applicationContext.xml");
//客户代码(这里就是我们的测试代码)仅仅面向接口编程,而无需知道实现类的具体名称。同时,
// 我们可以很简单的通过修改配置文件来切换具体的底层实现类。
// 组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关
// 系注入到组件之中。
Action action = (Action) ctx.getBean("LowerAction");
System.out.println(action.execute("Rod Johnson"));
action = (Action) ctx.getBean("UpperAction");
System.out.println(action.execute("Rod Johnson"));
}
}
执行结果如下:
。。。。。log4j打印的日志信息。。。。
loweractionrod johnson
UPPERACTIONROD JOHNSON
如果不用spring框架前面的接口和实现类的代码不变
先建立一个工厂类
package net.xiaxin.spring.qs;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Properties;
//import org.springframework.beans.BeanUtils;注意
import org.apache.commons.beanutils.BeanUtils;
//不用spring
//首先,我们必须编写一个配置文件读取类,以实现Message属性的可配置化。
//其次,得有一个Factory模式的实现,并结合配置文件的读写完成Action的动态加载。
public class ActionFactory {
public static Action getAction(String actionName){
Properties pro = new Properties();
try {
pro.load(new FileInputStream("src/config.properties"));
String actionImplName =
(String)pro.get(actionName);
String actionMessage =
(String)pro.get(actionName+"_msg");
Object obj =
Class.forName(actionImplName).newInstance();//反射机制
//BeanUtils是Apache Commons BeanUtils提供的辅助类
BeanUtils.setProperty(obj,"message",actionMessage); //obj.message = actionMessage
return (Action)obj;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
}
再见一个config.properties配置文件,内容如下:
TheAction=net.xiaxin.spring.qs.UpperAction
TheAction_msg=HeLLo
测试代码如下:
package test;
import net.xiaxin.spring.qs.Action;
import net.xiaxin.spring.qs.ActionFactory;
public class TestFactory {//不用spring
/**
* @param args
*/
public static void main(String[] args) {
Action action = ActionFactory.getAction("TheAction");
System.out.println(action.execute("Rod Johnson"));
}
}
此项目需要导入的jar包有log4j和commons-beansutil,见附件,还有源码见附件
- 大小: 29.9 KB
分享到:
相关推荐
在这个"第一个spring例子"中,我们将探讨如何创建一个简单的Spring应用,它包含了client和server两部分,这通常意味着我们将构建一个客户端-服务器架构的应用。为了运行此示例,你需要安装MySQL数据库服务和Apache ...
"spring第一个学习的例子"旨在帮助初学者快速入门Spring框架,通过实际操作理解其基本概念和工作原理。 首先,Spring的核心特性之一是依赖注入(Dependency Injection,简称DI)。这个例子可能包含了如何在配置文件...
在"spring第一个例子"中,我们将创建一个简单的Spring应用程序。这个例子通常包括以下步骤: 1. **配置Spring**:首先,我们需要创建一个Spring的配置文件,例如`applicationContext.xml`。在这个文件中,我们会...
这个“spring的一个简单的例子”压缩包可能是为了帮助初学者理解和入门Spring框架。以下是对这个简单例子中可能包含的知识点的详细解释: 1. **Spring 概述**: Spring 是一个开源的Java平台,它提供了一个全面的...
Spring框架是Java开发中最常用的轻量级框架之一,它的核心特性是依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect ...对于初学者来说,理解并熟练掌握这两个核心概念是深入学习Spring的第一步。
这个小例子中,我们可能看到了一个简单的Spring Security配置,演示了如何启动基础的认证和授权流程。通过分析`springtest`项目中的代码,我们可以进一步了解这些概念如何实际应用。这包括了安全配置类的编写、控制...
Spring MVC 是 Spring 框架的一个重要模块,它为构建基于Java的Web应用程序提供了一个强大的模型-视图-控制器(MVC)架构。Spring MVC 的设计允许开发者将业务逻辑、数据处理和用户界面分离,从而实现更好的可维护性...
这个“Spring Security 小例子(1)”很可能是针对初学者或者那些希望快速了解该框架基本用法的开发者设计的。在本篇文章中,我们将深入探讨Spring Security的核心概念和关键组件,以及如何在实际项目中应用它们。 ...
Spring第一个例子,适合初学者。欢迎下载。。。
在这个"spring boot小例子"中,我们看到项目被构建为一个 WAR 包,这表明它是为在外部应用服务器(如 Apache Tomcat)上运行而设计的。通常,Spring Boot 提供两种打包方式:jar 和 war。jar 包适合独立运行,内嵌了...
这个“Spring的第一个案例”将引导我们逐步了解如何在实际项目中使用Spring框架。 **核心组件** 1. **依赖注入(Dependency Injection, DI)**:Spring的核心功能之一是通过DI来管理对象及其依赖关系。它允许...
本实例将引导你逐步了解如何使用Spring框架构建你的第一个应用。首先,我们来详细探讨Spring的核心概念和主要组件。 Spring框架的核心是依赖注入(Dependency Injection,DI),它使得应用程序中的对象能够通过配置...
1、安装maven 2、eclipse安装m2eclipse插件 打开Eclipse菜单栏Help->Eclipse Marketplace 输入“Maven”搜索到插件Maven Integration for Eclipse 并点击insall安装 3、安装成成之后我们在Eclipse菜单栏中点击File->...
这个小例子是学习和理解SpringCloud基础概念和工作流程的一个良好起点。通过它,我们可以了解微服务架构中的各个组件如何协同工作,以及如何在实际项目中落地实施。虽然简单,但对于初学者来说,这是一个很好的实践...
第一个例子,基于Spring MVC的RESTful服务,可能会包含以下步骤: 1. 创建一个新的Spring Boot项目,引入Spring Web依赖。 2. 创建一个`RestController`,比如名为`MyController`,并使用`@RestController`注解标记...
本教程将带你逐步了解如何在.NET环境中构建Spring.NET的第一个测试例子。 首先,我们需要了解Spring.NET的核心概念。依赖注入(Dependency Injection,简称DI)是Spring.NET的核心特性之一,它允许我们解耦应用程序...
4. **SSH_01**:这个文件名可能指的是该压缩包中包含的是一个基于Spring、Hibernate和Spring MVC的初始项目,或者是一个教学示例的第1部分。可能包括了配置文件(如`applicationContext.xml`, `hibernate.cfg.xml`)...
这个"spring oauth2.0 例子"是一个在MyEclipse集成开发环境中创建的示例项目,用于演示如何在Spring框架中实现OAuth2.0认证和授权流程。 首先,OAuth2.0的核心概念包括客户端、资源所有者(用户)、授权服务器和...
第一个spring IOC例子(非maven) 方法步骤: 1、下载spring包,提取core,bean,context,expression 四大基础jar http://repo.spring.io/release/org/springframework/spring/ 2、下载common-logging jar ...