迅速掌握Spring框架

来源:互联网 发布:怎样关闭windows防火墙 编辑:程序博客网 时间:2024/06/02 11:43

迅速掌握Spring框架

Spring框架是SSH三剑客当中比较难理解的,然而它的意义对于软件来说是一场革命,完全颠覆了软件开发的流程。例如控制反转、依赖倒置这些高深的概念让我们无比膜拜,又让我们觉得离自己的日常使用是那么遥远,这也导致了很多公司会很顺理成章的去用Struts和Hibernate,因为这二者会提升公司产品的效率。然而关于软件开发,如何让开发变得简单,让组件真正实现解耦却很少被公司考虑或者关心。然而现在软件开发已经不是以前的作坊式的,不是单兵作战就可以完成的,现在讲究的是集团作战,多开发小组协同合作。

本文将通过一个最简单的例子让你能够掌握Spring框架,首先需要准备两个外部jar包:
1. spring.jar
2. common-logging-1.1.1.jar

新建Java project,命名为Demo,在Demo工程下新建一个包,不能使用default包,必须按照规范命名包,例如com.discover.test,否则后续spring找不到对应的bean。

在com.discover.test下新增Action接口,里面定义execute方法。

package com.discover.test;/** * @author Administrator * */public interface Action {    public String execute(String s);}

在com.discover.test下新增UpperActionImpl实现Action接口:

package com.discover.test;/** * @author Administrator * */public class UpperActionImpl implements Action {    private String message;    public String getMessage() {        return message;    }    public void setMessage(String message) {        this.message = message;    }    /* (non-Javadoc)     * @see Action#execute(java.lang.String)     */    @Override    public String execute(String s) {        // TODO Auto-generated method stub        return s+","+message.toUpperCase();    }}

新增一个bean.xml配置文件放到工程目录下,即和.project和.classpath放在同一级目录,否则bean文件访问不到。

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"><beans>  <description></description>  <bean id="TestAction" class="com.discover.test.UpperActionImpl">    <property name="message">      <value>happy birthday!</value>    </property>  </bean></beans>

最后写一个测试类来测试下我们刚才所做的工作实现什么样的效果。

package com.discover.test;import org.apache.commons.logging.Log;import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;/** * @author Administrator * */public class Test {    /**     * @param args     */    public static void main(String[] args) {        try {            testSpring();        } catch (Exception e) {            System.out.println(e.toString());        }    }    public static void testSpring() {        ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml");        Action action = (Action)context.getBean("TestAction");        System.out.println(action.execute("jack"));    }}

执行Test.java文件,在控制台可以看到:jack,HAPPY BIRTHDAY!

在bean.xml中配置的是小写的happy birthday,UpperActionImpl实现类的功能就是打印出输入的参数和在bean.xml配置的字符串,并以大写的形式打印。

最后看下工程目录:
这里写图片描述

不知道各位看到此处诧异Spring的强大没,也许大家都听说过依赖注入和控制反转,每次看了这些高大上的名词的解释后似懂非懂,过后再看到这些名词或者被别人问到,又不能说出它们的作用,那是因为如果没有实际的操作,认真的思考,是无法理解Spring的强大。依赖注入在我看来就是在运行时为组件配置所需资源,将原本需要在代码中指定的东西放到配置中,从而降低耦合。组件间的依赖不再是类或者接口,可以将类或者接口能提供的资源包装成服务放到bean文件中,通过bean文件对外暴露,这样不仅隐藏了内部实现,也降低了组件间的耦合性,提升代码的可重用性。

说到这里,也许有的人会想到工厂模式,当初会因为使用工厂模式一定程度上解决了代码的耦合性,提升了开发效率,然而有新的业务时除了写一种新的实现类外还要修改工厂类,修改工厂类是我们不希望,因为这并没有实现真正意义上的解耦。因此Spring的理念确实非常新颖,现在再回过头来理解控制反转,即获得对象不在代码中实现,放到配置中实现;依赖注入,即将依赖的资源不在代码中获取,推迟到运行的时候,从配置中注入。

0 0