Spring应用
一、 Spring基础
在本部分别,将介绍Spring框架的两个核心特性:反向控制(IOC)和面向切面编程(AOP)。
1、 首先,简单介绍Spring中的IOC和AOP;
2、 其次,装配Bean,介绍如何利用IOC实现系统对象间的松耦合关系,如何使用XML在Spring容器中定义系统对象,装配其依赖类。
3、 创建切面,介绍Spring的AOP把系统级服务(如安全和监控)从服务对象中解耦出来
1、 Spring简介
1)Spring特点
Spring是一个轻量级的loc和AOP容器框架。
a) 轻量级:从大小及系统开支上说。且Spring是非侵入式的(基于Spring开发的系统中对象一般不依赖于Spring的类)
b) 反向控制:使用loc对象是被动接收依赖而不是主动去找(容器在实例化对象是主动将其依赖类注入给它)
c) 面向切面:将业务逻辑从系统服务中分离,实现内聚开发。系统对象只做其该做的业务业务逻辑不负责其他系统问题(如日志和事务支持)
d) 容器:包括且管理系统对象的生命周期和配置,通过配置设定Bean是单一实例还是每次请求产生一个,并设定Bean之间的关联关系
e) 框架:使用简单组件配置组合成一个复杂的系统,系统中的对象是通过XML文件配置组合起来的,且Spring提供了很多基础功能(事务管理,持久层集成等)
2)Spring模块
AOP Module |
O/R Mapping Module |
Web Context and utility Module |
MVC framework |
JDBC and DAO Module |
Application Context Module |
||
Core container and Supporting Utilities |
Spring框架由7个模块组成:
a) 核心容器:提供了基础功能。包括BeanFactory类(Spring框架的核心,采用工厂模式实现Loc)
b) 应用上下文模块:扩展了Beanfactory,添加了对I18N(国际化)、系统生命周期事件及验证的支持,并提供许多企业级服务,如电子邮件、JNDI访问、EJB集成、远程调用及定时服务,并支持与模板框架(如Velocity和FreeMarker)的集成。
c) AOP模块:对面向切面提供了丰富的支持模式Spring应用系统开发切面的基础;并引入metadata编程
d) JDBC和DAO模块
e) O/R映射模块:
f) Web模块:建立在应用上下文模块的基础上,提供了合适web系统的上下文,另外,该模块支持多项面web任务,如透明处理多文件上传请求,自动将请求参数绑定到业务对象中等。
g) MVC框架:所有模块都是建立在核心容器上的,容器规定如何创建、配置和管理Bean,以及其细节。
3)搭建Spring应用开发环境
a) Spring的下载和安装
Spring当前GA版本是3.0.5,登录到http://www.springsource.org/站 点,单击Powloads链接进入download页面。然后单击Download链接,逐步进入真正的下载页面。
建议下载spring-framework-3.0.5-with-dependencies.zip包,这个压缩中不仅含Spring自身的所有应用包,还含有Spring编译和运行所依赖的第三方类库以及第三方开源框架的应用包。
在应用程序中使用Spring时,需要将spring.jar添加到项目的类路径中,另外还需要添加日志处理包commons-logging.jar以及它的实现包log4j-1.2.15jar(还需要添加他的配置文件log4j.properties)。至于其他的第三方类库,可以在具体需要使用时再加入。
b) 添加Spring配置文件
一般来说,使用Spring时会在项目的类路径(CLASSPATH)中添加Spring配置文件来声明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.5.xsd">
<!--配置由Spring来管理的Bean-->
<bean id="gdi" class="cn.csdn.dao.GenericDaoImpl">
<property name="say" value="O(∩_∩)O哈哈~"></property>
</bean>
</beans>
4)简单示例
首先导入必须的包commons-logging.jar和spring.jar
GreetDao.java
package cn.csdn.dao;
public interface GreetDao {
void sayGreet();
}
GreetDaoImpl.java
package cn.csdn.dao;
public class GreetDaoImpl implements GreetDao{
private String say;
@Override
public void sayGreet() {
System.out.println("Spring say:"+say);
}
public void setSay(String say) {
this.say = say;
}
}
GreetService.java
package cn.csdn.service;
public interface GreetService {
void sayGreet();
}
GreetServiceImpl.java
package cn.csdn.service;
import cn.csdn.dao.GreetDaoImpl;
public class GreetServiceImpl implements GreetService{
private GreetDaoImpl greetDaoImpl;
@Override
public void sayGreet() {
greetDaoImpl.sayGreet();
}
public void setGreetDaoImpl(GreetDaoImpl greetDaoImpl) {
this.greetDaoImpl = greetDaoImpl;
}
}
GreetTest.java
package cn.csdn.junit;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.csdn.service.GreetServiceImpl;
public class GreetTest {
@Test
public void test1(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
GreetServiceImpl gsi=(GreetServiceImpl) ac.getBean("greetServiceImpl");
gsi.sayGreet();
}
}
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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
">
<bean id="greetDaoImpl" class="cn.csdn.dao.GreetDaoImpl">
<property name="say">
<value>hello</value>
</property>
</bean>
<bean id="greetServiceImpl" class="cn.csdn.service.GreetServiceImpl">
<property name="greetDaoImpl" ref="greetDaoImpl"></property>
</bean>
</beans>