Spring中文开发详细手册
- 格式:doc
- 大小:134.30 KB
- 文档页数:22
Springside 3.3.2 技术参考手册1. 总述∙架构风格简述1.概述技术框架选型以工业化大规模软件开发为原则---主流的选型、适宜团队分工的架构,同时照顾轻量级快速开发的需求,Java版的约定大于配置的风格。
)在SpringSide的官方主页上,写着SpringSide 3 中包含的主流组件:Spring 2.5 + Hibernate 3 + Struts 2 + JSP 2.0 + JQuery + JAX-WS 2 (by Apache CXF 2) +SpringSecurity 2.0。
不过,如果你认为和SpringSide 2 相比,升级的只是版本号,那么你就大错特错了。
像我这样从SpringSide 2过来的人,如果能够详细对比SpringSide 2 和SpringSide 3,对于我们理解SpringSide 3肯定更加有帮助。
下面的内容是我自己的一些体会,不正确的地方欢迎大家指正。
从主要的架构来,依然是那么几层,先设计数据库,再写Entity层,再写Dao层,再写Action,然后使用JSP表现出来,其中的Entity和Dao层和Hibernate紧密相关,Action是Struts的主要部分,Spring作为粘合剂,把这些东西连在一起,并提供了一些机制简化编写这些层的工作。
SpringSide就是这样一个大的粘合体,省去了我们自己很多的粘合工作。
从SpringSide 2 到SpringSide 3,这些工作得到进一步的简化,我们开发起来就更爽了。
我认为,我们的开发模式,主要经历了这样的简化过程:第一阶段,代码加一大堆的配置文件第二阶段,代码加少量的配置文件第三阶段,代码加基本上等于零的配置文件这些进步是如何实现的呢?从第一阶段到第二阶段,主要靠的是Annotation,把一些大量的配置工作转移到了Java代码中,那么从第二阶段到第三阶段怎么实现呢?都已经Annotation了,你还有什么办法让配置文件更少?想不到吧!我也想不到,直到我看了SpringSide 3生成的项目,我才知道还有一个好东西叫自动扫描。
Spring 3.x权威开发指南:实施Java EE 6的利器2011年8月31日目录序 (VIII)前言 (X)1借助Spring 3.1实施Java EE 6 (1)1.1Java EE 6编程模型讨论 (1)1.1.1Java EE 6够敏捷,No! (1)1.1.2盘旋于具体与抽象之间 (2)1.2挖掘Spring 3.1的架构价值 (3)1.2.1精耕细作于Java EE 6平台 (3)1.2.2面向Spring的SpringSource Tool Suite集成开发工具 (3)1.2.3全面拥抱OSGi 4.2 (4)1.2.4开发者决定一切 (4)1.3下载及构建Spring 3.1 (5)1.3.1下载Spring 3.1正式发布版 (5)1.3.2基于SVN库持续构建Spring源码 (6)1.4小结 (7)2控制反转容器 (8)2.1DI及Spring DI概述 (8)2.1.1面向Java ME/Java SE的BeanFactory (8)2.1.2面向Java EE的ApplicationContext (9)2.2多种依赖注入方式 (9)2.2.1设值注入 (9)2.2.2构建器注入 (11)2.2.3属性注入 (12)2.2.4方法注入 (12)2.3借助Autowiring策略智能注入协作者 (13)2.3.1<bean/>元素的autowire属性 (13)2.3.2基于@Required注解加强协作者管理 (14)2.3.3基于@Autowired或@Inject注解的另一Autowiring策略 (16)2.3.4借助primary属性或@Qualifier注解细粒度控制Autowiring策略 (16)2.4资源操控 (19)2.5将DI容器宿主到Web容器中 (19)2.6外在化配置应用参数 (19)2.7Spring受管Bean的作用范围 (19)2.8Bean Validation集成支持 (19)2.9回调接口集合及触发顺序 (19)2.10<util/>命名空间 (20)2.11值得重视的若干DI特性 (20)2.11.1depends-on属性 (20)2.11.2别名(Alias) (20)2.11.3工厂Bean和工厂方法 (20)2.11.4<p/>命名空间 (21)2.11.5抽象和子Bean (21)2.12基于注解(Annotation)方式配置DI容器 (21)2.13Spring表达式语言(SpEL)支持 (22)2.13.1核心接口及类 (22)2.13.2基于API方式使用 (22)2.13.3基于XML方式使用 (22)2.13.4基于Annotation注解使用 (22)2.13.5SpEL语法速查 (22)2.14回调接口集合及其触发顺序 (22)2.14.1BeanNameAware回调接口 (22)2.14.2BeanClassLoaderAware回调接口 (23)2.14.3BeanFactoryAware回调接口 (23)2.14.4ResourceLoaderAware回调接口 (23)2.14.5ApplicationEventPublisherAware回调接口 (23)2.14.6MessageSourceAware回调接口 (23)2.14.7ApplicationContextAware回调接口 (23)2.14.8@PostConstruct注解 (23)2.14.9InitializingBean回调接口 (23)2.14.10<bean/>元素的init-method属性 (24)2.14.11@PreDestroy注解 (24)2.14.12DisposableBean回调接口 (24)2.14.13<bean/>元素的destroy-method属性 (24)2.15小结 (24)3面向切面编程 (25)3.1AOP及Spring AOP基础 (25)3.1.1细说AOP (25)3.1.2Spring AOP基础概念 (25)3.2AspectJ 6初探 (25)3.3老式Spring AOP (25)3.4基于@AspectJ的Spring AOP (26)3.5基于<aop:config/>元素的AOP (26)3.5.1巧用<aop:include/>元素 (26)3.6在AspectJ 6应用中启用@Configurable注解 (26)3.6.1显式使用AnnotationBeanConfigurerAspect切面 (26)3.6.2阐述@Configurable注解 (28)3.6.3通过META-INF/aop.xml(或aop-ajc.xml)控制启用的切面集合 (30)3.6.4<context:spring-configured/>元素 (31)3.6.5初探<context:load-time-weaver/>元素 (31)3.7小结 (31)4DAO层集成支持 (33)4.1RDBMS持久化操作抽象支持 (33)4.2.1JDBC最佳实践 (33)4.3事务集成支持 (33)4.4集成测试支持 (33)4.5在AspectJ 6应用中启用@Transactional注解 (33)4.6小结 (33)5Hibernate、JPA集成 (34)5.1Hibernate集成支持 (34)5.2JPA集成支持 (34)5.3智能处理Java EE容器中的装载期织入(LTW) (34)5.4小结 (35)6O/X Mapping集成支持 (36)6.1O/X Mapping集成支持 (36)6.1.1Marshaller及Unmarshaller接口 (37)6.2实践XMLBeans集成支持 (37)6.2.1借助Ant生成XMLBeans JAR (38)6.2.2XmlBeansMarshaller实现类 (39)6.2.3<oxm:xmlbeans-marshaller/>元素 (40)6.3小结 (40)7集成Java EE其他容器服务 (41)7.1简化JNDI操作 (41)7.2集成EJB 3.1 (41)7.3线程池及任务调度集成支持 (41)7.4集成JMS (41)7.5集成JavaMail (41)7.6集成分布式操作 (41)7.7集成JMX (42)7.8集成Java EE连接器架构 (42)8Web层集成支持 (43)8.1Spring Web MVC框架 (43)8.2Spring Portlet MVC框架 (43)8.3REST架构风格 (43)8.4小结 (43)9高级Spring 3.0特性 (44)9.1优雅销毁DI容器 (44)9.2小结 (44)10附录A:安装及使用SpringSource Tool Suite (45)10.1获得SpringSource Tool Suite (45)10.2安装SpringSource Tool Suite (45)10.3使用SpringSource Tool Suite (47)10.3.1针对Spring 3.1的支持 (47)10.3.2针对Spring Web Flow的支持 (49)10.3.3针对Spring Batch的支持 (50)10.3.4针对Spring Roo的支持 (50)11附录B:Spring 3.1内置的命名空间 (51)11.1<beans/>命名空间 (51)11.2<context/>命名空间 (51)11.3<util/>命名空间 (51)12附录C:Spring Web Services (52)12.1文档驱动的Web服务 (52)12.2面向OXM的Web服务实现策略 (52)12.3Web服务安全 (52)13附录D:Spring Web Flow (53)13.2探索Spring Web Flow (53)14附录E:Spring BlazeDS Integration (54)14.1Flex-RIA王者 (54)14.2简化BlazeDS的使用 (54)14.3深入到Spring BlazeDS Integration中 (54)15附录F:Spring Roo (55)15.1快速研发之道 (55)15.1.1Spring Roo概述 (55)15.2Spring Roo架构哲学 (55)15.3深入到Spring Roo中 (55)16附录G:相关资料 (56)16.1图书 (56)16.2网站 (56)序从2003年开始,开源Spring一直在同Java EE携手走来。
spring mvc学习教程(一)-入门实例引言1.MVC:Model-View-Control框架性质的C层要完成的主要工作:封装web请求为一个数据对象、调用业务逻辑层来处理数据对象、返回处理数据结果及相应的视图给用户。
2.简要概述springmvcSpring C 层框架的核心是DispatcherServlet,它的作用是将请求分发给不同的后端处理器,也即使用了一种被称为Front Controller 的模式(后面对此模式有简要说明)。
Spring 的C 层框架使用了后端控制器来、映射处理器和视图解析器来共同完成C 层框架的主要工作。
并且spring 的C 层框架还真正地把业务层处理的数据结果和相应的视图拼成一个对象,即我们后面会经常用到的ModelAndView 对象。
一、入门实例1. 搭建环境在spring的官方API文档中,给出所有包的作用概述,现列举常用的包及相关作用:org.springframework.aop-3.0.5.RELEASE.jar:与Aop编程相关的包org.springframework.beans-3.0.5.RELEASE.jar:提供了简捷操作bean的接口org.springframework.context-3.0.5.RELEASE.jar:构建在beans包基础上,用来处理资源文件及国际化。
org.springframework.core-3.0.5.RELEASE.jar:spring核心包org.springframework.web-3.0.5.RELEASE.jar:web核心包,提供了web层接口org.springframework.web.servlet-3.0.5.RELEASE.jar:web 层的一个具体实包,DispatcherServlet也位于此包中。
后文全部在spring3.0 版本中进行,为了方便,建议在搭建环境中导入spring3.0 的所有jar 包(所有jar 包位于dist 目录下)。
第一部分 Spring框架的概述Spring框架是一个轻量级的解决方案和为构建企业级应用程序潜在的一站式服务。
然而,Spring是模块化的,允许你只使用那些你需要的部分,而忽略其他部分。
你可以在使用Struts时用Spring的IoC 容器,但你也可以只使用Hibernate 集成代码或JDBC抽象层。
Spring框架支持声明式事务管理、通过RMI或web服务远程访问你的逻辑,还有多种方式处理数据的持久化。
它还提供一个全能的MVC框架,并且能将AOP移植进你的软件。
Spring被设计为非侵入式的,意味着你的逻辑代码完全不必依赖于此框架。
虽然一些基于数据访问技术和Spring的库会存在于你的集成层(例如数据访问层),但是你的其他代码很容易隔离这些依赖。
1.开始使用Spring这篇手册提供了关于spring框架的详细信息,不仅有全面的特性,还有一些关于spring包含的潜在的概念(例如“依赖注入”)的背景知识。
如果你才刚刚开始,也许你应该从低级版的"Getting Started" 手册开始,从bbb://spring.io.访问。
为了更容易消化,这篇手册是专注于任务式。
2.Spring框架的介绍Spring框架是一个支持开发Java应用程序而提供全面的基础设施的Java平台,Spring处理基础部分从而你可以专注于你的应用。
spring 让你能够通过POJOs和向POJOs应用无侵入的企业服务就可以构建你的应用。
这些不仅能应用到Java SE而且还能应用到Java EE.一些作为一个开发者能够使用spring平台优势的例子●使Java方法可以执行数据库事务而不用去处理事务API●使本地Java方法可以执行远程过程而不用去处理远程API●使本地Java方法可以拥有管理操作而不用去处理JMXAPI●使本地Java方法可以执行消息处理而不用去处理JMSAPI2.1 依赖注入和控制反转Java应用程序——一个宽松的专业术语,小到一个Appletes大到运行在n层服务器上的企业级程序—通常由互相协作的对象而形成的适当的应用程序。
SpringCloudStream中⽂指导⼿册原⽂地址:Spring Cloud Stream中⽂指导⼿册Spring Cloud Stream 核⼼ 本节将详细介绍如何使⽤Spring Cloud Stream,并包含了诸如如何创建和运⾏Stream应⽤的内容。
1.简介 Spring Cloud Stream是⼀个构建消息驱动微服务应⽤的框架。
它基于Spring Boot构建独⽴的、⽣产级的Spring应⽤,并使⽤Spring Integration为消息代理提供链接。
你可以添加@EnableBinding注解到你的应⽤中来快速连接到消息代理,添加@StreamListener注解到⼀个⽅法上,这个⽅法会接收到Stream处理事件。
下⾯是⼀个接收外部消息的简单接收应⽤。
@(Spring Cloud Stream)SpringBootApplication@EnableBinding(Sink.class)public class VoteRecordingSinkApplication {public static void main(String[] args) {SpringApplication.run(VoteRecordingSinkApplication.class, args);}@StreamListener(Sink.INPUT)public void processVote(Vote vote) {votingService.recordVote(vote);}} @EnableBinding注解接收⼀个或者多个接⼝类型的参数(在这个例⼦⾥⾯,参数是单个Sink接⼝)。
接⼝参数声明了输⼊和/或输出通道。
Spring Cloud Stream提供了Source、Sink和Process接⼝。
你也可以定义你⾃⼰的接⼝。
下⾯是Sink接⼝的定义:public interface Sink {String INPUT = "input";@Input(Sink.INPUT)SubscribableChannel input();} @Input注解标识了⼀个输⼊通道,应⽤程序通过它接收消息;@Output注解标识了⼀个输出通道,应⽤程序通过它发布消息。
【SpringFramework】Spring⼊门教程(三)使⽤注解配置本⽂主要介绍四个⽅⾯:(1) 注解版本IOC和DI(2) Spring纯注解(3) Spring测试(4) SpringJDBC - Spring对数据库的操作使⽤注解配置Spring⼊门说在前⾯学习基于注解的IoC配置,⼤家脑海⾥⾸先得有⼀个认知,即注解配置和xml配置要实现的功能都是⼀样的,都是要降低模块间的耦合度。
仅仅只是配置的形式不⼀样。
关于实际的开发中到底使⽤xml还是注解,每家公司有着不同的使⽤习惯。
所以这两种配置⽅式我们都需要掌握。
基于注解配置的⽅式也已经逐渐代替xml配置。
所以我们必须要掌握使⽤注解的⽅式配置Spring。
配置步骤注意:如果使⽤Eclipse需要先安装了STS插件,或者使⽤STS开发⼯具创建项⽬。
本⽂使⽤IDEA进⾏演⽰。
1.2.1. 第⼀步:拷贝必备jar包到⼯程的lib⽬录。
注意:在基于注解的配置中,我们还要多拷贝⼀个aop的jar包。
如下图:1.2.2. 第⼆步:在类的根路径下创建⼀个任意名称的xml⽂件(不能是中⽂)注意:基于注解整合时,Spring配置⽂件导⼊约束时需要多导⼊⼀个context命名空间下的约束。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd"></beans>1.2.3. 第⼆步:创建⼀个服务类创建⼀个测试的服务类,并且加⼊使⽤@Component注解,声明该类允许注⼊到Spring容器package org.cjw.service;import ponent;/*使⽤注解配置时,需要将Spring框架启动就创建对象的类表⽰为组件类表⽰组件类使⽤@Component注解*/@Componentpublic class CustomerService {public void save() {System.out.println("-保存数据-");}}1.2.4. 第四步在spring的配置⽂件加⼊扫描注解<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd"><!-- 声明扫描包及其⼦包的类,如果发现有组件注解的类,就创建对象并加⼊到容器中去 --><context:component-scan base-package="org.cjw" /></beans>1.2.5. 第五步:测试调⽤代码package org.cjw.test;import org.cjw.service.CustomerService;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class CustomerServiceTest {@Testpublic void testSave() {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");CustomerService customerService = context.getBean(CustomerService.class);customerService.save();}}--测试结果,如果可以调⽤服务⽅法,测试成功。
SpringBoot官⽅⽂档中⽂版-3.构建你的代码前⾔这是 SpringBoot 官⽅⽂档中⽂翻译版系列的第三篇⽂章:前两篇⽂章如下:Spring Boot 不需要任何特定的代码布局来⼯作。
然⽽,有⼀些最佳实践是有帮助的。
1.避免使⽤“默认”包当⼀个类不包含包声明时,它被认为是在“默认包”中。
通常不⿎励使⽤“默认包”,应该避免使⽤。
对于使⽤ @ComponentScan、@ConfigurationPropertiesScan、@EntityScan或@SpringBootApplication 注释的 SpringBoot 应⽤程序来说,它可能会导致特定的问题,因为每个 jar 中的每个类都被读取。
我们建议您遵循 Java 推荐的包命名约定并使⽤反向的域名(例如,com.example.project)。
2. 主应⽤程序类的位置我们通常建议您将主应⽤程序类放在其他类之上的根包中。
@SpringBootApplication 注释通常放在主类上,它隐式地为某些项定义了⼀个基本的“搜索包”。
例如,如果您正在编写⼀个 JPA 应⽤程序,则使⽤ @SpringBootApplication 注释类的包来搜索@Entity 项。
使⽤根包还允许只在项⽬上应⽤组件扫描。
如果你不想使⽤ @SpringBootApplication,它导⼊的 @EnableAutoConfiguration 和 @ComponentScan 注释定义了该⾏为,所以你也可以使⽤它们。
下⾯的清单显⽰了⼀个典型的布局:com+- example+- myapplication+- MyApplication.java|+- customer| +- Customer.java| +- CustomerController.java| +- CustomerService.java| +- CustomerRepository.java|+- order+- Order.java+- OrderController.java+- OrderService.java+- OrderRepository.javaMyApplication.java ⽂件将声明 mian ⽅法,以及基本的 @SpringBootApplication,如下所⽰:import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}}每天学习⼀点点,每天进步⼀点点。
这次发布的Spring Security-3.0.1 是一个bug fix 版,主要是对3.0 中存在的一些问题进行修正。
文档中没有添加新功能的介绍,但是将之前拼写错误的一些类名进行了修正,建议开发者以这一版本的文档为参考。
另:Spring Security 从2010-01-01 以后,版本控制从SVN 换成了GIT,我们在翻译文档的时候,主要是根据SVN 的变化来进行文档内容的比对,这次换成GIT 后,感觉缺少了之前那种文本比对工具,如果有对GIT 熟悉的朋友,还请推荐一下文本比对的工具,谢谢。
序言I. 入门1. 介绍1.1. Spring Security 是什么?1.2. 历史1.3. 发行版本号1.4. 获得Spring Security1.4.1. 项目模块1.4.1.1. Core - spring-security-core.jar1.4.1.2. Web - spring-security-web.jar1.4.1.3. Config - spring-security-config.jar1.4.1.4. LDAP - spring-security-ldap.jar1.4.1.5. ACL - spring-security-acl.jar1.4.1.6. CAS - spring-security-cas-client.jar1.4.1.7. OpenID - spring-security-openid.jar1.4.2. 获得源代码2. Security 命名空间配置2.1. 介绍2.1.1. 命名空间的设计2.2. 开始使用安全命名空间配置2.2.1. 配置web.xml2.2.2. 最小<http> 配置2.2.2.1. auto-config 包含了什么?2.2.2.2. 表单和基本登录选项2.2.3. 使用其他认证提供器2.2.3.1. 添加一个密码编码器2.3. 高级web 特性2.3.1. Remember-Me 认证2.3.2. 添加HTTP/HTTPS 信道安全2.3.3. 会话管理2.3.3.1. 检测超时2.3.3.2. 同步会话控制2.3.3.3. 防止Session 固定攻击2.3.4. 对OpenID 的支持2.3.4.1. 属性交换2.3.5. 添加你自己的filter2.3.5.1. 设置自定义AuthenticationEntryPoint2.4. 保护方法2.4.1. <global-method-security> 元素2.4.1.1. 使用protect-pointcut 添加安全切点2.5. 默认的AccessDecisionManager2.5.1. 自定义AccessDecisionManager2.6. 验证管理器和命名空间3. 示例程序3.1. Tutorial 示例3.2. Contacts3.3. LDAP 例子3.4. CAS 例子3.5. Pre-Authentication 例子4. Spring Security 社区4.1. 任务跟踪4.2. 成为参与者4.3. 更多信息II. 结构和实现5. 技术概述5.1. 运行环境5.2. 核心组件5.2.1. SecurityContextHolder, SecurityContext 和Authentication 对象5.2.1.1. 获得当前用户的信息5.2.2. UserDetailsService5.2.3. GrantedAuthority5.2.4. 小结5.3. 验证5.3.1. 什么是Spring Security 的验证呢?5.3.2. 直接设置SecurityContextHolder 的内容5.4. 在web 应用中验证5.4.1. ExceptionTranslationFilter5.4.2. AuthenticationEntryPoint5.4.3. 验证机制5.4.4. 在请求之间保存SecurityContext 。
Spring3 MVC - 3到Spring MVC框架简介Spring3 MVC框架简介Spring MVC是Spring的框架的Web组件。
它提供了丰富的功能,为建设强大的Web应用程序。
Spring MVC框架的架构,并在这样的高度可配置的方式,每一块的逻辑和功能设计。
此外Spring可以毫不费力地与其他流行的Web框架,如Struts,WebWork的,的Java Server Faces和Tapestry集成。
这意味着,你甚至可以告诉Spring使用Web框架中的任何一个。
比Spring更不紧耦合的servlet或JSP 向客户端呈现视图。
喜欢速度与其他视图技术集成,Freemarker的,Excel或PDF现在也有可能。
Spring3.0 MVC系列∙第1部分:到Spring 3.0 MVC框架简介∙第2部分:在Spring 3.0 MVC创建Hello World应用程序∙第3部分:在Spring 3.0 MVC的形式处理∙第4部分:Spring3 MVC的Tiles Support与Eclipse中的例子插件教程∙第5部分:Spring3 MVC的国际化及本地化教程与范例在Eclipse∙第6部分:Spring3 MVC示例教程Spring主题∙第7部分:创建Spring3 MVC Hibernate 3的示例在Eclipse中使用Maven的在Spring Web MVC,你可以使用任何对象作为命令或表单支持对象,你不需要实现框架特定的接口或基类。
Spring的数据绑定是高度灵活的:例如,将验证错误类型不作为应用系统错误,可以通过评估的不匹配。
因此,你不必重复你的业务对象的属性,简单的无类型的字符串,在表单对象仅仅是为了处理无效的意见,或正确转换的字符串。
相反,它往往是最好直接绑定到业务对象。
请求处理生命周期Spring的Web MVC框架是,像许多其他Web MVC框架,要求为导向,围绕一个中心的servlet,它把请求分派给控制器,提供其他功能,有利于开发Web应用而设计的。
spring配置详解1.前⾔公司⽼项⽬的后台,均是基于spring框架搭建,其中还⽤到了log4j.jar等开源架包。
在新项⽬中,则是spring和hibernate框架均有使⽤,利⽤了hibernate框架,来实现持久化,简化sql操作等。
Hibernate配置⽂件可以有两种格式,⼀种是 hibernate.properties,另⼀种是hibernate.cfg.xml。
后者稍微⽅便⼀些,当增加hbm映射⽂件的时候,可以直接在 hibernate.cfg.xml ⾥⾯增加,不必像 hibernate.properties 必须在初始化代码中加⼊。
我们新项⽬中使⽤的是hibernate.cfg.xml格式。
不过在本⽂中不将细述,后续有机会再补上。
公司项⽬中,中间件主要有tomcat,webshpere,WebLogic。
以下,将对项⽬中spring基本配置,log4j的配置,还有中间件的相关参数配置做⼀个初步的介绍。
2.spring配置——以⽼GIS项⽬为例⼦GISV13中的配置涉及到了SpringMVC,IOC,AOP, Quartz⽅⾯的配置。
配置的实现是通过注记配置和XML配置来合作实现。
这⾥,我将按照Spring的配置流程,将其他⼏个⽅⾯的配置融合其中,来进⾏全⾯解析。
2.1SpringMVC的配置2.1.1.web.xml的配置Web程序中,当中间件启动时,中间件会⾸先读取web.xml中的配置。
在web.xml中可以配置监听器,过滤器,servlet映射等等。
在Spring 框架中,我们主要需配置容器初始化时读取的spring容器配置⽂件的路径以及springMVC中的分发器DispatcherServlet。
在GISV13的web.xml中,我们定义了如下内容:InitGISConfigServlet定义了容器启动时,⾸先要运⾏这个⽅法。
然后servletname为MVC的这部分便是定义了springMVC的分发器以及此servlet所对应的加载配置⽂件的路径。
在《静态代理和动态代理》中提到了面向方面编程,主要就是基于动态代理。
单独抽象出非业务的功能,服务于某些业务方法。
Spring提供了四种很实用的Advice,分别为:Before Advice, After Returning Advice, Around Advice, After throwing Advice。
都是方法级别的,就是在某个方法执行前后插入一些非业务的操作,如打日志或者判断权限等。
对于这四种advice的实现,spring都提供了三种方法,分别为基于接口、基于xml和基于annotation(注释)。
Before Advice会在目标对象的方法执行之前被调用;After Advice会在目标方法执行之后被调用;Around Advice则可以在目标方法执行前后同时加上相关服务;Throw Advice是在异常发生后执行某些操作。
1.基于接口的Advice这个就需要自定义的Aspect实现Spring接口。
BeforeAdvice需要实现org.springframework.aop.MethodBeforeAdvice接口:After Advice实现org.springframework.aop.AfterReturningAdvice接口:Around Advice需要实现org.aopalliance.intercept.MethodInterceptor接口:类前面的注释说明了该方法的使用,就是要在invoke()方法中调用MethodInvocation.proceed(),将执行传给下一个Interceptor,最终执行目标方法。
在proceed()方法前后加操作,到达Aroud advice的作用。
在Aspect定义好后,就需要在bean定义文件中进行配置,通过org.springframework.aop.framework.ProxyFactoryBean的配置,指出接口、目标类和Aspect。
关于本书本书本书编写主要⽬的在于翻译官⽅spring.io关于SpringFramework模块⽂档之核⼼篇,但是本书不仅仅是简单的翻译,我会根据相应的模块给出⼀些代码的操作实践以及给出相应的源码分析,SpringFramework⽂档我个⼈认为在所有开源框架中算是写得最好的了,But如果对于初学者或者是实践经验较少的⼩伙伴来说还是⽐较困难的。
这⾥不仅仅是⽂档全是英⽂形式⽽且根据⽂档的概述是⽐较难理解和应⽤到实践项⽬开发中,这⾥需要开发⼈员积累了相应的项⽬实践经验才⾏。
So我在翻译SpringFramework过程中会不断编写相应的示例代码、结合⽂档和源码分析达到更好的理解。
在后⾯的书中我可能会翻译现在⽐较流⾏的微服务框架SpringBoot、SpringCloud以及Spring的其他模块⽐如:SpringData、SpringSession、SpringSecurity等,SpringFramework在整个Spring体系中起着基⽯的作⽤,SpringBoot基于SpringFramework进⾏了相应的拓展包括:⾃动化配置、外部化配置、组件化(start模式)等,⽽SpringCloud基于SpringBoot对整个微服务体系的服务治理、服务注册发现、统⼀配置中⼼等做了相关的集成和统⼀相关的抽象例如:Spring Cloud Commons等。
对应SpringFramework这块主要分为以下模块来解析:Spring核⼼、测试、数据存储、Web Servlet、Web Reactive、集成。
版本当前选择的版本Version 5.2.7.RELEASE进⾏分析。
约束使⽤字体加粗对重点关键字进⾏标注使⽤灰⾊线框对专业术语进⾏标识本⽂使⽤不同层级对⽂档结构进⾏描述⽂章的⼀级、⼆级分类尽量保存英⽂不做翻译(能够帮助读者能够快速定位原⽂位置)示例代码地址:https:///newitman/SpringFramework5.2.6.git本书开始编写时间2020-05-05作者个⼈从事⾦融⾏业,就职过易极付、思建科技、某⽹约⻋平台等重庆⼀流技术团队,⽬前就职于某银⾏负责统⼀⽀付系统建设。
Spring框架参考文档-5.0.0-中文完整版AuthorsRod Johnson , Juergen Hoeller , Keith Donald , Colin Sampaleanu , Rob Harrop , Thomas Risberg , Alef Arendsen , Darren Davison , Dmitriy Kopylenko , Mark Pollack , Thierry Templier , Erwin Vervaet , Portia Tung , Ben Hale , Adrian Colyer , John Lewis , Costin Leau , Mark Fisher , Sam Brannen , Ramnivas Laddad , Arjen Poutsma , Chris Beams , Tareq Abedrabbo , Andy Clement , Dave Syer , Oliver Gierke , Rossen Stoyanchev , Phillip Webb , Rob Winch , Brian Clozel , Stephane Nicoll , Sebastien Deleuze版本号:5.0.0.RELEASECopyright ? 2004-2016Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically.文档官网:https://docs.spring.io/spring/docs/5.0.0.RELEASE/spring-framework-reference/index.html现在官网的5.0.0已经在2017年9月28日出了release版,为此翻译了5.0.0版本(从4.3.10升级到此版本,如果还在使用4.3.10版本,请看本人的前一个版本),翻译前后历时15天,十多次的修改和校对。
SpringFramework5.0⼊门教程1. 为什么学习Spring?随着对Java EE的不断接触和理解,你会发现Spring 在各个企业和项⽬中发挥着越来越重要的作⽤。
掌握Spring 已成为我们IT ⾏业⽣存必学的本领之⼀。
1. Spring Framework 是⼀个开源的Java/Java EE全功能栈(full-stack)的应⽤程序框架,以Apache许可证形式发布,也有.NET平台上的移植版本。
2. 该框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)⼀书中的代码,最初由RodJohnson和Juergen Hoeller等开发。
3. Spring Framework提供了⼀个简易的开发⽅式,这种开发⽅式,将避免那些可能致使底层代码变得繁杂混乱的⼤量的属性⽂件和帮助类。
Spring Framework 当前最新版本是Spring Framework 5,当你打开官⽹,你应该能够看到官⽹的宣传图⽚这⾥有个相关的新闻有兴趣可以看下,中⽂版点击查看根据官⽹动态和我所了解的信息来看,Spring 官⽹还会继续⽀持Spring MVC,因为它还有很多改进的地⽅。
但是未来的趋势我认为必将是Spring Boot+ SpringWeb Flux + Spring Cloud .那么Spring MVC 和 Spring Web Flux 两者有何区别呢?官⽹对此给出了这样⼀张对⽐图:翻译下就是:1. Spring MVC基于servlet API构建,并使⽤⼀个同步阻塞I / O体系结构和⼀个单线程请求线程模型的Web 框架2. Spring WebFlux是⼀个⾮阻塞的Web框架,从该组建⽴起,利⽤多核,下⼀代处理器和⼤量并发连接。
总结:1. Spring MVC 是基于Servlet API 构建的同步阻塞式I/O 的Web 框架。
SpringBatch中⽂参考⽂档V3.0.6-1SpringBatch介绍1 Spring Batch介绍企业领域中许多应⽤系统需要采⽤批处理的⽅式在特定环境中运⾏业务操作任务。
这种业务作业包括⾃动化,⼤量信息的复杂操作,他们不需要⼈⼯⼲预,并能⾼效运⾏。
这些典型作业包括:基于时间的事件处理(例如:⽉底结算,通知或信函);重复的、数据量⼤的、业务逻辑规则错综复杂的定期任务(例如:保险盈利决策和利率调整);来⾃内外部不同应⽤系统的信息集成任务,这些信息需要进⾏格式化、校验,并通过事务的⽅式处理成为系统可⽤的记录。
批处理程序就是⽤来处理这种数以亿计的企业⽇常事务。
Spring Batch是⼀个轻量级的,全⾯的批处理框架,旨在帮助开发⼈员构建出健壮的⽤于处理⽇常事务的企业级批处理系统。
Spring Batch 构建于POJO和Spring框架,开发者容易上⼿,现有的优秀企业级服务也能融合进来。
Spring Batch不是⼀个调度框架。
当前开发市场上有许多优秀的企业级调度器,包括付费软件和开源软件,例如Quartz, Tivoli, Control-M等。
Spring Batch的设计意图不是来替换它们,⽽是配合这些调度器协同⼯作。
Spring Batch提供处理⼤数据的可复⽤的核⼼功能,包括⽇志/跟踪,事务管理,Job程序统计,job重启,job跳转和资源管理,它同时也提供先进的技术服务和特性,即通过优化和分区技术使得批处理作业达到⾼容量和⾼性能。
⽆论简单的,复杂的还是⾼容量的批处理任务都可以利⽤该框架的可扩展性来处理⼤量的信息。
1.1 背景当开源软件项⽬和相关的社区重点关注⽹络和基于SOA消息的体系框架时,java领域仍然缺少⼀个可复⽤的批处理框架,企业应⽤仍在当前的IT环境中处理这样的批处理事务。
标准化、可复⽤的批处理架构的缺失导致IT企业各⾃开发了⼀次性的、并只针对本企业内部系统的解决⽅案,⽆法复⽤。