Spring简介

框架和工具类区别?

解析:

 1.企业级系统

    大规模:用户数量多、数据规模大、功能众多

    性能和安全要求高

    业务复杂

灵活应变

2.Java技术如何应对

     EJB Accp3.0 ....----->Spring

3.Spring之父简介

  Rod Johnson,SpringFramework创始人, interface21 CEO

  丰富的c/c++背景,丰富的金融行业背景

  1996年开始关注Java服务器端技术

  Servlet2.4和JDO2.0专家组成员

  2002年著写《Expoert one-on-oneJ2EE设计与开发》,改变了Java世界

  技术主张:技术以实用为本,音乐学博士

 4.Spring相关知识简介

AOP 联盟官网

http://aopalliance.sourceforge.net/

http://sourceforge.net/projects/aopalliance/files/aopalliance/1.0/

02.IOC和DI

3w1h教学法:

What:什么是IOC 控制反转

Why:为什么IOC?

When :什么时候使用IOC?

How:怎么用?

1.先来看控制反转:

    控制反转(Inversion of Control),是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心,beans。

  理解一:将组件对象的控制权从代码本身转移到外部容器()

  理解二:IOC控制反转:指创建对象实例的控制权从代码控制剥离到IOC容器(spring容器)控制。

IOC原理:

在源代码中频繁的使用new关键字,占用大量内存空间,所以使用IoC来解耦,通过xml节点来告知容器如何对内存中构建的对应类型的对象名称做命名,来减少代码量,优化内存所占用的空间。

 2.再来看:DI依赖注入(Dependency Injection)

    DI依赖注入:指创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。

  两者关系:它们是spring核心思想的不同方面的描述。 (重点)

 3.DI 和 IOC 详细阐述
    首先,DI和IOC是差不多的概念。 一个重要特征是接口依赖,是把对象关系推迟到运行时去确定. 
      DI是一个初始化实例的过程,分为三种1.setter based 2.constructor based 3.interface based,在spring 中就是应用前两种;但又不仅仅是初始化实例,而且是运用接口的概念去实现这种注入依赖。静态地看,只是依赖一个接口,但实际运行起来,是依赖一个实现了该接口的具体类。 
IOC就是面向接口编程的应用 
1.一个通常的做法(非面向接口编程的方法),对象A依赖对象B,B会作为A的属性,可以理解为A直接控制B; 
2.IOC的做法,对象A依赖于接口C,而不直接依赖于实现了接口C的B,也就是A不能直接控制是哪个具体实现了C的B去做相应的事情,而是由我们控制可以由哪个实现了接口C的B去处理,也就是控制反过来了,是由B来决定了,而不是由A,实现就是面向接口编程。 

对象之间的关系 (面向对象分析 OOA、面向对象设计 OOD 、面向对象编程 OOP)

分析      --------   设计  ------     编程

是                泛化           extends 

能                实现           接口 implements

有                关联           成员变量

用                依赖           方法中局部变量

IoC能做什么

IoC不是一种技术, 只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致 类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样 也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。

IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。 

 IoC和DI

DI—Dependency Injection,即“依赖注入”:是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并 非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何 代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:

谁依赖于谁:当然是应用程序依赖于IoC容器;

为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;

谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;

注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。

IoC和DI由什么关 系呢?其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以 2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

注:如果想要更加深入 的了解IoC和DI,请参考大师级人物Martin Fowler的一篇经典文章《Inversion of Control Containers and the Dependency Injection pattern》,原文地址:http://www.martinfowler.com/articles/injection.html。

要煮饭了,各位发离线就好

FilterDispatcher是struts2.0.x到2.1.2版本的核心过滤器.! 
StrutsPrepareAndExecuteFilter是自2.1.3开始就替代了FilterDispatcher的.! 
这样的改革当然是有好处的.! 
为什么这么说.? 应该知道如果我们自己定义过滤器的话, 是要放在strtus2的过滤器之前的, 如果放在struts2过滤器之后,你自己的过滤器对action的过滤作用就废了,不会有效!除非你是访问jsp/html! 
那我现在有需求, 我必须使用Action的环境,而又想在执行action之前拿filter做一些事, 用FilterDispatcher是做不到的.!
那么StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在这两个过滤器之间加上我们自己的过滤器.! 
给你打个比喻, 现在有病人要做手术, 现在struts2要做两件事, 搭病床(环境),执行手术.! 那么打麻药的工作呢.? 不可能要病人站着打吧, 所以必须有病床的环境,打完麻药之后再动手术.! 这个比喻非常形象了.!

原文地址:https://www.cnblogs.com/Chenghao-He/p/7629845.html