spring的第一个小例子

此例子是选择夏欣翻译的spring开发手册上的例子
在myeclipse下新建SpringFirst工程,然后添加spring能力(即添加必要的spring的jar包)

整个项目的目录结构如下:

[img]http://dl.iteye.com/upload/attachment/301962/395d5317-24d2-3578-8bd3-6cdf2380af65.jpg[/img]


定义一个接口
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

[color=red]如果不用spring框架[/color]前面的接口和实现类的代码不变

先建立一个工厂类
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,见附件,还有源码见附件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值