第十一章 集成Spring framework
Springframework 是一个为了简化JavaEE开发而创建的一个框架,其中主要的功能为IOC。简单说明参看Springfremework 的founder Rod Johnson 写的
《Introduction to Springframwork》
http://www.theserverside.com/tt/articles/article.tss?l=SpringFramework
Sringframework总最著名的特性要数控制反转(Inversion of Control),也叫依赖注入(Dependency Injection),详细参看Martin Flower的文章:
《Inversion of Control Containers and the Dependency Injection pattern》
http://martinfowler.com/articles/injection.html
Ioc的来源
时代的变迁:
New → 基于接口的编程 → 工厂方法 → Ioc
我们先看一个代码关系,例如:
TopLogic需要一个SecondLogic完成一定的业务。
SecondLogic需要TopDAO来完成数据库访问。
New时代:那么一定会有这样的代码:
public class TopLogic{
private SecondLogic logic ;
public TopLogic() {
logic = new SecondLogic();
//以下为初始化方法调用
logic.XXX
...
}
public topMethod() {
loggic.someMethod();
}
}
public class SecondLogic{
private TopDAO dao ;
public SecondLogic() {
dao = new TopDAO();
//以下为初始化方法调用
dao.XXX
...
}
}
在New时代,对象间的关系通过New操作符链接,如果你需要一个对象,简单的New一个就好。
New的好处是非常简单,不好的地方有两点,第一,你不知道New了多少个,在哪里New的。
第二是,一旦对象的名字发生了变更,或者New的初始化发生了变更(更常见),所有使用到New的地方都需要修改。
基于接口的时代: 接口是服务定义,接口是类型定义:一个接口定义了一种类型(接口名字),这种类型提供
特定的服务(接口方法)。
基于接口的编程一定要讲一个服务类(例如TopLogic,SecondLogic等)分成两部分,一个用于定义服务的接口,和
一个实现了接口方法的实现类。
例如
public interface SecondLogic {
public void someMethod();
}
public class SecondLogicImpl implements SecondLogic{
public void someMethod() {
....
}
}
在TopLogic中使用SecondLogic的时候,不需要使用SecondLogicImpl定义,而用接口定义,
只是在实例化这个类型(接口)的时候才需要实例化类的名字(SecondLogicImpl)例如:
public class TopLogic{
private SecondLogic logic ;
public TopLogic() {
logic = new SecondLogicImpl();
//以下为初始化方法调用
logic.XXX
...
}
public topMethod() {
loggic.someMethod();
}
}
通过使用基于接口的编程,减低了变量名字变更造成的影线,但是没有降低变量初始化
过程变化的影响。
工厂方法和基于接口联合使用
为了将变量初始化过程变化的影响变为最小,必须把变量的初始化方法风中起来,于是
产生了工厂方法
例如,我们会有SecondLogicFacotry工厂负责专门初始化SecondLogic的实例,代码为:
public class SecondLogicFactory {
public static SecondLogic createSecondLogic() {
SecondLogic logic = new SecondLogicImpl();
//以下为初始化方法调用
logic.XXX
...
return logic;
}
}
这时,TopLogic中所有关于SecondLogic初始化的内容都被移除了,TopLogic变为:
public class TopLogic{
private SecondLogic logic ;
public TopLogic() {
logic = SecondLogicFactory.createSecondLogic()
}
public topMethod() {
loggic.someMethod();
}
}
通常上述逐步的简化代码变得越来越清楚。
Ioc时代(以Spring为例)
Ioc将所有的对象之间的关系转移到了xml配置文件中来。
在TopLogic中声明存储SecondLogic的属性
public class TopLogic{
private SecondLogic logic ;
public void setSecondLogic(SecondLogic logic) { this.logic = logic; } public TopLogic() {
}
public topMethod() {
loggic.someMethod();
}
}
声明变量之间的关系:
<beans>
<bean id="secondLogic" class="com.jpleasure.teamware.logic.SecondLogic">
<property name="XXX" value = "11111"/>
<property name="YYY" value = "22222"/>
</bean>
<bean id="topLogic" class="com.jpleasure.teamware.logic.TopLogic">
<property name="secondLogic" ref = "
secondLogic"/>
</bean>
</beans>
当我们从Spring IOC容器中取得topLogic的时候,其中的secondLogic属性自动的通过
配置文件的配置得到了初始化。
为什么Strut2需要使用SpringFramework 在Struts2中Action是我们扩展的点,我们使用Action处理用户提交的请求,向用户展现数据。
为了更好的组织代码的结构,我们一般情况下使用三层的构架:
Action
→ Logic → Dao
这样如果我们手动的管理这些对象之间的关系,以方便非常的繁琐,另外也很不利于管理
变更,所以我们更倾向于使用Spring等类似的IOC框架类管理。
如何将Springframework和Struts2结合起来
回想第一章,我们指导在Struts2中每一个对象都是靠ObjectFactory创建的,而Springframework
就是用来管理对象创佳的,我们只需要将ObjectFactory的对象创建方法改为Spring即可。
1)在struts.properties或者struts.xml文件中将objectfactory的属性设置为spring方式:
xml方式:
<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
properties方式:
struts.objectFactory=org.apache.struts2.spring.StrutsSpringObjectFactory
2)当然还需要将需要的Jar文件放在WEB-INF/lib目录下
这些文件包括:
struts2-spring-plugin-2.0.9.jar
spring.jar(为了省事,包含了所有的spring模块,实际项目中可以考虑使用具体的模块)
3)剩余的就是Springframework的配置了
第一,告诉Spring,对象间关系的配置在那里存放
需要在web.xml文件中添加如下内容(注意顺序):
这个Listener在应用程序启动的时候启动,用来读取配置文件。
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
这个参数配置了配置文件的路径,说明我们可以在classpath或者WEB-INF目录下
防止名字满足applicationContext-*.xml格式你的文件。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml
</param-value>
</context-param>
4)如何让Struts2的Action和Springframework的bean管理起来?
Struts2会根据struts.xml中配置的class名字在springframeowrk中找id相同的bean,如果找不到
就按照普通的方式实例化Action类。
例如:
struts-todo.xml
<action name="forward" method="forward"
class="todo">
<result name="insert">/todo/insert.jsp</result>
<result name="update">/todo/insert.jsp</result>
<result name="delete">/todo/insert.jsp</result>
</action>
applicationContext-todo.xml
<bean id="todo" class="com.jpleasure.teamware.action.TodoAction"
singleton="false">
<property name="todoLogic" ref="todoLogic"></property>
</bean>
则class=“todo”的Action会使用com.jpleasure.teamware.action.TodoAction。
基本程序结构: │ .classpath
│ .project
├─src
│ │ applicationContext-todo.xml
│ │ struts-todo.xml
│ │ struts.properties
│ │ struts.xml
│ │ teamware.properties
│ │
│ └─com
│ └─jpleasure
│ └─teamware
│ ├─action
│ ├─dao
│ ├─fw
│ ├─logic
│ ├─util
│ └─vo
└─WebContent
│ Index.html
│ Index.jsp
│
├─META-INF
│ MANIFEST.MF
│
├─todo
│ list.jsp
│
└─WEB-INF
│ web.xml
│
└─lib
commons-logging-1.0.4.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
spring.jar
struts2-core-2.0.9.jar
struts2-spring-plugin-2.0.9.jar
xwork-2.0.4.jar
关于Spring的内容,请参看www.springframework.org
分享到:
相关推荐
4. **一站式解决方案**:Spring Framework 不仅仅是一个框架,它更像是一个集成了多种功能的一站式服务。它涵盖了从数据访问到业务逻辑管理等各个方面,几乎可以满足大多数典型应用的需求。此外,Spring 还具有良好...
Spring Framework 是一个广泛使用的Java应用开发框架,由Pivotal Software公司开发并维护。它为构建企业级应用程序提供了全面的支持,包括依赖注入、面向切面编程(AOP)、数据访问、事务管理、Web应用程序和更多...
#### 第十一章:Spring依赖注入 - **基于构造函数的依赖注入:** - 通过构造函数参数传递依赖项。 - **基于setter方法的依赖注入:** - 通过setter方法注入依赖。 #### 第十二章:Spring内部Bean注入 - **内部...
这个"最新版spring-framework-5.0.1.RELEASE-dist完整包"包含了Spring框架的第五个主要版本的首个次要更新,提供了许多增强的功能和优化,旨在提升开发效率和应用性能。 Spring Framework 5.0 的核心改进包括: 1....
<groupId>org.springframework <artifactId>spring-webmvc <version>5.3.23 ``` 请注意,版本号可能会随时间更新,建议查看Spring的官方仓库获取最新版本。 接下来,我们需要配置Spring MVC的核心组件——...
Spring Framework MVC 是一款广泛使用的Java应用开发框架,用于构建基于模型-视图-控制器(MVC)架构的Web应用程序。这个教程将引导你逐步完成一个Spring MVC应用的开发过程。 第 1 部分 - 设置基本应用程序和环境 ...
通过对以上知识点的深入探讨,我们可以看到 Spring Framework 不仅仅是一个简单的框架,而是集成了许多先进设计理念和技术的综合平台。无论是对于初学者还是资深开发者而言,掌握这些核心概念都是非常必要的。
Spring Framework 是一个广泛使用的 Java 应用程序框架,它提供了一个通用的编程模型和配置机制,帮助开发者快速构建企业级应用程序。下面是对 Spring Framework 的详细知识点总结: 1. 什么是 Spring? Spring ...
例如,在`第十一章 集成Spring framework.html`中,可能会介绍如何配置Struts2与Spring的整合,通过Spring管理Action类的生命周期,实现依赖注入,提高代码的解耦度。 综上所述,Struts2.0标签库是开发Java Web应用...
11. **Docker和Kubernetes集成**:SpringBoot和SpringCloud可以轻松地与Docker容器化技术结合,通过Kubernetes进行服务编排,实现自动化部署和扩展。 这些知识点是SpringCloud开发中的关键点,学习和掌握它们将有助...
4. **spring-context-support**: 支持与第三方库如Quartz、JMS的集成。 5. **spring-expression**: 引入了强大的表达式语言(SpEL)用于运行时查询和操作对象属性。 6. **spring-aop**: 面向切面编程的支持。 7. **...
第十一章聚焦于如何使用Spring构建RESTful Web服务。RESTful架构风格已经成为现代Web服务的标准,Spring提供了丰富的支持来帮助开发者快速构建这样的服务。本章涵盖了如何定义RESTful端点、处理HTTP请求以及序列化...
11. `spring-webmvc-3.0.5.RELEASE.jar`: 是Spring MVC的实现,提供了一种模型-视图-控制器的架构模式,用于构建Web应用。 这个版本的Spring框架还支持JSR-303(Bean Validation)和JSR-310(Java 8日期时间API)的...
**All-In-One Code Framework** 是一个由微软内部开发团队创建的综合代码框架,它基于.NET 3.0和3.5版本。这个框架的主要目的是为开发者提供一系列的技术文档和示例,以帮助他们理解和应用微软的各种开发技术。原本...
通过阅读《Quartz Job Scheduling Framework第11章》的文档,你将掌握如何利用这个强大的工具来提升你的应用程序的自动化水平,从而提高效率并减少手动操作。 文档中的内容可能还会涵盖错误处理、异常策略、Job状态...
这一章可能会讲解如何使用Mock对象、TestNG或JUnit进行测试,并利用Spring TestContext Framework来简化测试环境的设置。 8. **MVC的拦截器(Interceptor)**:在Spring MVC中,拦截器可以用于处理请求前后的通用...
- **第一个Spring应用**:通过一个简单的例子来介绍如何构建第一个基于Spring的应用程序。 #### 3. Spring中的IoC与DI - **IoC(Inversion of Control)**:控制反转是一种设计模式,用来减少计算机代码之间的耦合...
其中`org.springframework.beans`主要提供Bean操作的基本支持,而`org.springframework.context`则在此基础上添加了更丰富的功能,如国际化支持、资源加载等。 - **BeanFactory**:是最基本的IoC容器,提供最简单...
9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知事务操作 9.5.9. 结合AspectJ使用 @...