迅速掌握Spring框架

##迅速掌握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的理念确实非常新颖,现在再回过头来理解控制反转,即获得对象不在代码中实现,放到配置中实现;依赖注入,即将依赖的资源不在代码中获取,推迟到运行的时候,从配置中注入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值