Spring框架是一个非常优秀的轻量级J2EE容器,它是一个开源框架。可以更深层次的降低业务层的耦合程度,其核心是一个轻量级容器(Container),并且实现了IoC(控制反转)模式。
Spring是一个轻量级的IoC和面向切面(AOP)的容器框架。通过IoC技术促进了松耦合,提供了面向切面编程的丰富支持,并且允许通过分离应用业务逻辑与系统级服务进行内聚性的开发。
Spring框架是一个分层架构,由7个定义良好的组件组成。Spring组件构建在核心容器之上,核心容器创建、配置、管理Bean的方式。组成Spring框架的每个组件都可以单独存在,或者与其他一个或对个组件联合实现。7个组件如下所示
1.Spring Core
Spring的核心容器,提供Spring框架的基本功能。其主要组件是BeanFactory,它是工程模式的实现。BeanFactorys使用IoC模式将应用程序的配置和依赖性规范与实际的应该程序代码分开。
2.Spring Context
是一个配置文件,向Spring框架提供上下文信息。
3.Spring AOP
通过配置管理特性,Spring AOP直接将面向切面的编程功能集成到了Spring框架中。Spring AOP 为基于Spring的应用程序中的对象提供了事务管理服务。通过Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。
4.Spring DAO
JDBC DAO抽象层提供了有意义的异常层次结构,可以用该结构来管理异常处理和不同数据库供应商抛出的错误信息。Spring DAO 面向JDBC的异常遵循通用的DAO异常层次结构。
异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码量(如:打开和关闭连接)
5.Spring ORM
Spring 框架插入了多个ORM框架,从而提供了ORM的对象关系工具。
6.Spring Web
Spring 框架支持与Jakarta Struts的集成。Spring Web组件简化了处理多部分请求以及将请求参数绑定到域对象的工作。
7.Spring Web MVC
该框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,Spring Web MVC框架变为高度可配置的。
DI(Dependency Injection,依赖注入)和IoC(Invaersion of Control,控制反转)是同一个概念。在Spring中,当一个角色A需要另一个角色B协助工作时,Spring容器负责调用B,而不需要A自己去调用,这被称为控制反转;Spring容器创建B的实例,然后注入给A,称为依赖注入。
- 简单实例
1.接口类Book.java
package org;
public interface Book {
public String showAuthor(String author);
public String showBookPrice(double bookPrice);
}
2.实现类
HLM.java
package org;
public class HLM implements Book{
@Override
public String showAuthor(String author) {
String str = "红楼梦作者:" + author;
return str;
}
@Override
public String showBookPrice(double bookPrice) {
String str = "红楼梦价格:" + bookPrice;
return str;
}
}
SGYY.ava
package org;
public class SGYY implements Book{
public String showAuthor(String author) {
String str = "三国演义作者:" + author;
return str;
}
public String showBookPrice(double bookPrice) {
String str = "三国演义价格:" + bookPrice;
return str;
}
}
3.在WEB-INF下创建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 容器创建和管理这两个类,目的是让主程序只与Book接口耦合,而避免与实现类耦合。
这样当主程序需要使用者两个实现类时,只需要从Spring容器中取出这两个实现类的实例就可以了。 -->
<bean id="hlm" class="org.HLM" />
<bean id="sgyy" class="org.SGYY" />
</beans>
4.运行类Test.java
package org;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//读取配置文件
ApplicationContext ac = new FileSystemXmlApplicationContext("/WebContent/WEB-INF/applicationContext.xml");
//从Spring容器中获得实例hlm
Book book = (Book) ac.getBean("hlm");
System.out.println(book.showAuthor("曹雪芹"));
System.out.println(book.showBookPrice(45.0));
//从Spring容器中获得实例hlm
Book book2 = (Book)ac.getBean("sgyy");
System.out.println(book2.showAuthor("罗贯中"));
System.out.println(book2.showBookPrice(41.0));
}
}