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之旅的更多相关文章

  1. Spring学习笔记--spring+mybatis集成

    前言: 技术的发展, 真的是日新月异. 作为javaer, 都不约而同地抛弃裸写jdbc代码, 而用各种持久化框架. 从hibernate, Spring的JDBCTemplate, 到ibatis, ...

  2. Spring学习笔记--Spring IOC

    沿着我们上一篇的学习笔记,我们继续通过代码学习IOC这一设计思想. 6.Hello类 第一步:首先创建一个类Hello package cn.sxt.bean; public class Hello ...

  3. Spring学习笔记-Spring之旅-01

    使用Spring简化JAVA开发 Spring的四种关键策略: ●基于POJO的轻量级和最小侵入式编程: ●通过依赖注入(DI)和面向接口实现松耦合: ●基于切面(AOP)和惯例进行声明式编程. ●通 ...

  4. Spring学习笔记--Spring配置文件和依赖注入

    Spring配置文件 1.alias:设置别名,为bean设置别名,并且可以设置多个别名; <!-- 设置别名 --> <alias name="user" al ...

  5. Spring学习笔记——Spring中的BeanFactory与FactoryBean

    BeanFactory BeanFactory是Spring的org.springframework.beans.factory下的一个接口,是Spring IOC所遵守的基本编程规范.他的实现类有D ...

  6. Spring学习笔记--Spring简介

    1.spring:给软件行业带来了春天; 2.spring的理念:spring框架的初衷是使的现有的更加实用,spring不是创造轮子(技术或框架),而是使现有的轮子更好的运转;spring本身是一个 ...

  7. Spring学习笔记——Spring依赖注入原理分析

    我们知道Spring的依赖注入有四种方式,各自是get/set方法注入.构造器注入.静态工厂方法注入.实例工厂方法注入 以下我们先分析下这几种注入方式 1.get/set方法注入 public cla ...

  8. Spring学习笔记--Spring表达式语言SpEL

    Spring3引入了Spring表达式语言(Spring Expression Language,SpEL).SpEL是一种强大的.简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean ...

  9. 转:Spring学习笔记---Spring Security登录页

    转:http://axuebin.com/blog/2016/06/21/spring-security/?utm_source=tuicool&utm_medium=referral. 提示 ...

随机推荐

  1. ArcSDE安装步骤及问题

    ArcSDE安装步骤及问题 自己在安装ArcSDE的时候遇到了一些问题,现在将详细的安装过程和遇到的问题记在这里,以备以后使用. 1. 安装Oracle: 2. 安装ArcSdeOracle10g: ...

  2. asp.net MVC4的执行流程

    MVC在底层和传统的asp.net是一致的,在底层之上,相关流程如下: 1)Global.asax里,MvcApplication对象的Application_Start()事件中,调用 RouteC ...

  3. hdu 5291 dp+优化 ****

    多校实在高能 题解链接 题意:有n中糖果,每种糖果有ai个.分给A,B两个人.两人的糖果要一样多,可以都是0,1......m个.同一种糖果没有区别. 问有几种分法. 定义dp[i]表示两人之间相差i ...

  4. Discuz资料整理

    1.截取字符串:messagecutstr(strip_tags($post['message']), 160);

  5. Qt编程之通过鼠标滚轮事件缩放QGraphicsView里面的Item

    首先自己subclass QGraphicsView的一个类,叫DiagramView,然后重新实现它的滚轮事件函数,然后发送一个缩放信号: oid DiagramView::wheelEvent(Q ...

  6. 移动web开发常用属性

    <!-- html5 doctype --> <!doctype html> <!-- lang 属性设置,中文页面尽量不要设置为 "en",这会开启 ...

  7. 在一些开源框架中,dist文件夹是什么意思

    全称是distribution. distribution英 [dɪstrɪ'bjuːʃ(ə)n]美 ['dɪstrə'bjʊʃən]: 发行版 n. 分布:分配 在某些框架中,因为开发和发布是的内容 ...

  8. UITableView性能的优化()

    1.0 使用不透明视图 不透明的视图可以极大地提高渲染的速度. 2.0 不要重复创建不必要的cell 也就是我们常说的 循环利用机制 (建立缓冲池) 3.0  减少视图的数目 4.0  不要做多余的绘 ...

  9. 附加任务:团队作业7 Alpha冲刺

    附加任务:团队作业7 Alpha冲刺 附加任务要求参考东北师范大学陈志勇老师博客:https://edu.cnblogs.com/campus/nenu/2016SE_NENU/homework/19 ...

  10. 测试dos攻击对openflow中flow_table溢出的影响

    环境准备 环境 ubuntu16.04 mininet pox scapy 安装mininet sudo apt-get update sudo apt-get upgrade git clone g ...