标签:hibernate 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的理念确实非常新颖,现在再回过头来理解控制反转,即获得对象不在代码中实现,放到配置中实现;依赖注入,即将依赖的资源不在代码中获取,推迟到运行的时候,从配置中注入。
标签:hibernate spring框架 控制反转 依赖注入
原文地址:http://blog.csdn.net/dotnetstudio/article/details/45443181