Spring学习笔记—Spring之旅
1.Spring简介
Spring是一个开源框架,最早由Rod Johnson创建,并在《Expert One-on-One:J2EE Design and Development》这本著作中进行了介绍。Spring是为了解决企业级应用开发的复杂性而创建的,使用Spring可以让简单的JavaBean实现之前只有EJB才能完成的事情。但Spring不仅仅局限于服务器开发,任何Java应用都能在简单性、可测试性和松耦合等方面从Spring中获益。
1.1 简化Java开发
Spring通过激发POJO的潜能、依赖注入降低耦合、基于切面进行声明式编程和使用模板消除样板式代码等方式简化Java开发。
依赖注入让相互协作的软件组件保持松散耦合,而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件。
<bean id="fileUploadServiceAop" class="com.ouc.mkhl.supplier.security.util.FileUploadServiceAop"></bean><aop:config><aop:pointcut id="fileUploadAudit" expression="execution(* com.ouc..service.impl.FileUploadServiceImpl.*(..))"/> <aop:aspect ref="fileUploadServiceAop" order="5"><aop:before pointcut-ref="fileUploadAudit" method="beforeExecute"/><aop:after pointcut-ref="fileUploadAudit" method="afterExecute" /></aop:aspect> </aop:config>
这里使用Spring的AOP配置的命名空间把fileUploadServiceAop Bean声明为一个切面。首先,必须把fileUploadServiceAop声明为一个Bean,然后在<aop:aspect>元素中引用该Bean。为了进一步定义切面,必须使用<aop:before>来声明在* com.ouc..service.impl.FileUploadServiceImpl.*(..)方法执行前调用fileUploadServiceAop的beforeExecute()方法,这种方式被为前置通知。同时还必须使用<aop:after>声明在* com.ouc..service.impl.FileUploadServiceImpl.*(..)方法执行后调用afterExecute()方法,这种方式被称为后置通知。
1.2 容纳你的Bean
1.Spring两种不同的容器实现:Bean工厂和应用上下文。
Bean工厂(bean factories,由org.springframework.beans.factory.BeanFactory接口定义)是最简单的容器,提供基本的DI支持。
应用上下文(application由org.springframework.context.ApplicationContext接口定义)基于BeanFactory之上构建,并提供面向应用的服务,例如从属性文件解析文本信息的能力,以及发布应用事件给感兴趣的事件监听者的能力。
Spring自带了几种类型的应用上下文。以下列出常用的三种:
● ClassPathXmlApplicationContext——从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当作类资源。
● FileSystemXmlApplicationContext——读取文件系统下的XML配置文件并在加载上下文定义。
● XmlWebApplicationContext——读取Web应用下的XML配置文件并装载上下文定义。
例:如下代码展示了如何加载一个FileSystemXmlApplicationContext:
ApplicationContext context = new FileSystemXmlApplicationContext("D:/test.xml");
类似地,也可以使用ClassPathXmlApplicationContext从应用的类路径下加载应用上下文:
ApplicationContext context = new ClassPathXmlApplicationContext("test.xml");
使用FileSystemXmlApplicationContext和使用ClassPathXmlApplicationContext的区别在于:FileSystemXmlApplicationContext在指定的文件系统下查找test.xml文件;而ClassPathXmlApplicationContext是在所有的类路径(包含JAR文件)下查找test.xml文件。
通过现有的应用上下文引用,你可以调用应用上下文的getBean()方法从Spring容器中获取Bean。
2.Bean的生命周期:
1)Spring对Bean进行实例化。
2)Spring将值和Bean的引用注入进Bean对应的属性中。
3)如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()接口方法。
4)如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()接口方法,将BeanFactory容器实例传入。
5)如果Bean实现ApplicationContextAware接口,Spring将调用setApplicationContext()接口方法,将应用上下文的引用传入。
6)如果Bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessBeforeInitializing()接口方法。
7)如果Bean实现了InitializingBean接口,Spring将调用它们的afterPropertiesSet()接口方法。类似地,如果Bean使用init-method声明了初始化方法,该方法也会被调用。
8)如果Bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessAfterInitializing()接口方法。
9)此刻,Bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁。
10)如果Bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果Bean使用destroy-method声明了销毁方法,该方法也会被调用。
1.3 Spring框架的组成
1.Spring框架6个不同的功能模块组成:
核心Spring容器、Spring的AOP模块、数据访问与集成、Web和远程调用、Instrumentation设备支持和测试。
2.Spring Portfolio框架和类库
1)Spring Web Flow建立于Spring MVC框架之上并为基于流程的会话式Web应用(例:购物车、向导)提供支持。
2)Spring Web Service提供了契约优先的Web Service模型,服务的实现都是为了满足服务的契约而编写的。
3)Spring Security和Spring AOP为Spring应用提供了声明式安全机制。
4)Spring Integration提供了几种通用的应用集成模式的Spring声明式风格的实现。
5)Spring Batch用于辅助批处理程序的开发。
6)Spring Social是Spring的一个社交网络扩展模块。
7)Spring Mobile是Spring新的扩展模块用于支持移动Web应用开发。
8)Spring Dynamic Modules整合了Spring的声明式依赖注入和OSGi的动态组件模型。
9)Spring LDAP是基于Spring风格的基于模板的LDAP访问,消除了因使用LDAP而产生的样板式代码。
10)Spring Rich Client是一个富应用工具箱,为Swing赋予了Spring的魔力。
11)Spring .NET提供了相同的松耦合和面向切面的Spring特性,自带了简化.NET开发的ADO.NET、NHibernate、ASP.NET和MSMQ等多个模块。
12)Spring-Flex集成包使得Flex和AIR应用可以使用BlazeDS与服务端的Spring Bean进行通信,还包含Spring Roo的扩展,可用于快速开发Flex应用。
13)Spring Roo提供了一个可以快速开发Spring应用的交互工具环境,融入了最近几年形成的最佳实践。
14)Spring Extensions:
①Python语言的Spring实现;
②Blob Storage;
③db4o和CouchDB的持久化框架;
④基于Spring的工作流管理类库;
⑤Spring Security的Kerberos和SAML的扩展。
1.4 Spring新功能
1.Spring2.5新特性:
Spring2.5之前的版本都是采用基于XML的配置,Spring2.5重大意义在于拥抱注解驱动开发。
● 使用@Autowired实现基于注解驱动的依赖注入和使用@Qualifier实现细粒度的自动装配(auto-wiring)控制。
● 支持JSR-250注解,包括支持命名资源依赖注入的@Resource,以及对生命周期方法支持的@PostConstruct和@PreDestroy。
● 自动扫描使用@Component注解(或其他构造型注解)所标注的Spring组件。
● 一个全新的基于注解驱动的Spring MVC编程模型,极大简化了Spring Web开发。
● 基于JUnit4和注解的一个新的集成测试框架。
● 完全支持Java 6和Java EE 5,涵盖JDBC4.0、JTA 1.1、JavaMail 1.4和JAX-WS 2.0。
● 通过Bean的名字来编织切面的新的Bean命名切入点表达式。
● 内嵌支持AspectJ的类加载器织入。
● 新的XML命名空间,包括配置应用上下文细节的context命名空间和配置消息驱动Bean的jms命名空间。
● 支持在SqlJdbcTemplate中使用命名参数。
2.Spring3.0新特性:
● Spring MVC全面支持Rest,Spring MVC控制器响应响应REST风格的URL并返回XML、JSON、RSS或者其他适宜的响应。
● 新的表达式语言把Spring的依赖注入带到了一个新的高度,允许注入各种来源,包含其他Bean和系统属性。
● Spring MVC新的注解,包含@CookieValue和@RequestHeader,分别从Cookie和请求头中获取值。
● 一个新的XML命名空间,用来减少Spring MVC配置。
● 支持基于JSR-302注解的声明式校验。
● 支持新的JSR-330依赖注入规范。
● 通过注解驱动声明异步和调度方法。
● 一个新的注解驱动的配置模型,几乎可以避免使用XML进行Spring配置。
● Spring Web Service项目的OXM功能已被迁移到Spring框架核心。
Spring学习笔记—Spring之旅相关推荐
- Spring学习笔记--spring+mybatis集成
前言: 技术的发展, 真的是日新月异. 作为javaer, 都不约而同地抛弃裸写jdbc代码, 而用各种持久化框架. 从hibernate, Spring的JDBCTemplate, 到ibatis, ...
- Spring学习笔记——Spring如何装配各种类型的属性以及实际应用
在类中的定义的属性我们可以通过Spring的容器给他们赋值,Spring这种功能在我们实际中有什么作用呢?举个我在工作中实际用的例子吧, 如果我们把数据库的连接配置文件加密了,我们就不能直接加载使用了 ...
- 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传
作者:ssslinppp 1. 摘要 前篇文章讲解了单文件上传<[Spring学习笔记-MVC-13]Spring MVC之文件上传>http://www.cnblogs.co ...
- Spring学习笔记(三) AOP_annotation,AOP_XML
在学习课程以前,听说AOP有种很神秘的感觉,好像很好深的技术.其实原理很简单,使用动态代理的方式给程序增加逻辑.与此相似的有struts2中的filter拦截器. 再讲AOP之前先把需求说一下: 同S ...
- spring学习笔记06-spring整合junit(出现的问题,解决的思路)
spring学习笔记06-spring整合junit(出现的问题,解决的思路) 文章目录 spring学习笔记06-spring整合junit(出现的问题,解决的思路) 3.1测试类中的问题和解决思路 ...
- spring学习笔记01-BeanFactory和ApplicationContext的区别
spring学习笔记01-BeanFactory和ApplicationContext的区别 BeanFactory 和 ApplicationContext 的区别 BeanFa ...
- spring学习笔记02-spring-bean创建的细节问题
spring学习笔记02-spring-bean创建的细节问题 三种创建Bean对象的方式 Bean的作用范围 Bean的生命周期 <?xml version="1.0" e ...
- spring学习笔记03-spring-DI-依赖注入详解(通过xml配置文件来配置依赖注入)
spring学习笔记03-spring-DI-依赖注入详解 1.概念 2.构造函数注入 3.set方法注入 4.集合的注入 需要被注入的实体对象 package com.itheima.service ...
- Spring学习笔记:配置单数据源
Spring学习笔记:配置单数据源 一.Spring Boot默认数据源类型 Springboot默认支持4种数据源类型,定义在 org.springframework.boot.autoconfig ...
- Spring学习笔记:第一个Spring Boot程序HelloWorld
Spring学习笔记:第一个Spring Boot程序HelloWorld 一.跟着 Spring 了解技术趋势 1.看看 Spring 5.x 的改变暗示了什么 2.Spring Boot 和 Sp ...
最新文章
- pygame是python的一个库吗,python学习pygame,,基本库导入impor
- PHP和MySQL入门(8)
- 深度学习表征的不合理有效性——从头开始构建图像搜索服务(一)
- java jar包示例_Java包isCompatibleWith()方法与示例
- 使用HttpsUrlConnedtion连接https地址时异常处理 (方式二)
- 近千人观看live,晚8点继续安排,2个CPU过高案例+1个文件数据删除案例-Oracle故障分析的方法论+DBA能力提升要领...
- 我在安装TFS 2008的时候遇到的问题以及解决方法一账户问题
- 在Carmaker中建立自己的交通环境
- Python黑帽子 黑客与渗透测试编程之道(三)取代netcat
- AJax视频教程适高级篇+源码(2G)25讲
- VS code编译C或C++
- 计算机机房系统安装,学校机房轻松安装WIN7系统.doc
- 7.1编辑shapefile文件
- 【php】PHP制作QQ微信支付宝三合一收款码
- 使用ffmpeg从视频中提取纯音频纯视频
- HDU-1546-Idiomatic Phrases Game
- mysql outer join报错_千与千寻-MySQL联结join
- 企业为什么做不好生产计划?
- CDN--降低75%CDN成本!黑科技PCDN前世今生:定义、功能、架构、场景和优势
- VSCode Tab按键失效,无法自动补全是什么情况?
热门文章
- 视音频处理大神-雷霄骅
- 数字电路实验 03 - | 数据选择器及其应用
- 音乐推荐系统协同过滤算法解释
- 3招教你花式导入Excel数据到JMP
- TMOD、TCON、SCON、PCON、SBUF寄存器说明
- blp模型 上读下写_谁能简单解释一下经济学中的BLP模型?
- 机器学习面试必知:学生t分布的神奇之处
- 2018弱密码TOP 100
- java实现生命游戏
- 网络历史之金融投资三剑客0