当前位置: 首页>前端>正文

spring项目中为什么有的类是红色和蓝色的类 为什么spring是轻量级

spring 是开源的,轻量级的开源框架。何为轻量级?


轻重量级某种程度上是以启动程序需要资源多少来决定,专业一点的说就是:量级主要是看对容器的依赖性所决定的,依赖性越小,越轻量,反之。

轻量:spring从开销,占用资源,大小等方面都是轻量级的。并且spring是非侵入式的,在spring中的对象不依赖其他特定的类。

控制反转IOC():实现低偶合,ioc与jndi相反---不是对象从容器中查找依赖,而是容器在对象初始化时,不等对象请求就主动把依赖关系传替给它。


控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。

Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:


依赖:谁依赖于谁?为什么需要依赖? 

注入:谁注入于谁?到底注入什么?

控制反转:谁控制谁?控制什么?为何叫反转(有反转就应该有正转了)?

依赖注入和控制反转是同一概念吗?

        下面就来简要的回答一下上述问题,把这些问题搞明白了,IoC/DI也就明白了。

(1)参与者都有谁:

        一般有三方参与者,一个是某个对象;一个是IoC/DI的容器;另一个是某个对象的外部资源。

        又要名词解释一下,某个对象指的就是任意的、普通的Java对象; IoC/DI的容器简单点说就是指用来实现IoC/DI功能的一个框架程序;对象的外部资源指的就是对象需要的,但是是从对象外部获取的,都统称资源,比如:对象需要的其它对象、或者是对象需要的文件资源等等。

(2)谁依赖于谁:

        当然是某个对象依赖于IoC/DI的容器

(3)为什么需要依赖:

        对象需要IoC/DI的容器来提供对象需要的外部资源

(4)谁注入于谁:

        很明显是IoC/DI的容器 注入 某个对象

(5)到底注入什么:

        就是注入某个对象所需要的外部资源

(6)谁控制谁:

        当然是IoC/DI的容器来控制对象了

(7)控制什么:

        主要是控制对象实例的创建

(8)为何叫反转:

        反转是相对于正向而言的,那么什么算是正向的呢?考虑一下常规情况下的应用程序,如果要在A里面使用C,你会怎么做呢?当然是直接去创建C的对象,也就是说,是在A类中主动去获取所需要的外部资源C,这种情况被称为正向的。那么什么是反向呢?就是A类不再主动去获取C,而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中。

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

依赖注入也分3种?(可以网上去看看 怎么实现的注入方式)

1.设置注入(spring常用的注入方式)

2.构造注入

3.接口注入

面向切面:spring提供了丰富的面向切面编程思想,允许通过分离应用的业务逻辑与系统级服务(列如审计与事物)进行内聚性的开发应用对象只允许他们应该实现的--完成业务逻辑--仅此而已。他们并不负责其他的系统级关注点,列如日志或事务支持。

特性:

spring强大的基于javabeans的采取控制反转原则的配置管理,使得更加快捷。

不同运行环境的核心Bean工厂,数据库事务的一般抽象化,宣告式的事务管理器,简化事务与底层无关性。对JDBC抽象层提供了有针对性的异常等级,简化了错误处理,大大减少程序的编码量,再次利用JDBC时,你无需再写出另一个终止模块,并且向JDBC的异常与spring通用数据库访问对象异常等级一致。

特点:

1.方便解耦,简化开发

通过spring提供的ioc容器,我们可以将对象之间的依赖关系交由spring进行控制,避免硬编码所造成的过度耦合。

2.aop编程的支持

通过spring提供的aop功能,方便进行面向切面的编程,许多不容易用传统的oop实现的功能,可以通过aop实现,

3.声明式事务的支持

在spring中,我们可以从单调代码式的事务管理解脱出来。通过配置声明的方式灵活的进行事务的管理,提高开发效率与质量,减少代码量

4.方便程序的测试

spring对junit4的支持。可以通过注解方便的测试程序

5.集成各种优秀框架的优越性

Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。

6.spring对很多难用的javaee api(如jdbc,远程调用,javamail)提供了一些封装,可以方便更好的调用。

7.java源码的经典学习范列

Spring的源码设计精妙、结构清晰、匠心独运,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果。

关于面向对象(OO)程序设计的思想的分析

---00A

Object-Oriented Analysis(面向对象分析方法)是确定需求或者业务的角度,按照面向对象的思想来分析业务。例如:OOA只是对需求中描述的问题,进行模块化的处理,描述问题的本质,区别每个问题的不同点相同点,确定问题中的对象。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。

---OOD

面向对象设计(Object-Oriented Design,OOD)方法是OO方法中一个中间过渡环节。其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。OOD的目标是管理程序内部各部分的相互依赖。为了达到这个目标,OOD要求将程序分成块,每个块的规模应该小到可以管理的程度,然后分别将各个块隐藏在接口(interface)的后面,让它们只通过接口相互交流。

---OOP

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。Object Oriented Programming,面向对象的程序设计。所谓“对象”在显式支持面向对象的语言中,一般是指类在内存中装载的实例,具有相关的成员变量和成员函数(也称为:方法)。面向对象的程序设计完全不同于传统的面向过程程序设计,它大大地降低了软件开发的难度,使编程就像搭积木一样简单,是当今电脑编程的一股势不可挡的潮流。

优点:

1.低侵入式设计,代码污染极低。(何为非侵入式)

Spring框架是一种非侵入式的轻量级框架

1.非侵入式的技术体现

允许在应用系统中自由选择和组装Spring框架的各个功能模块,并且不强制要求应用系统的类必须从Spring框架的系统API的某个类来继承或者实现某个接口。

2.如何实现非侵入式的设计目标的

 1)应用反射机制,通过动态调用的方式来提供各方面的功能,建立核心组间BeanFactory

 2)配合使用Spring框架中的BeanWrapper和BeanFactory组件类最终达到对象的实例创建和属性注入

 3)优点:允许所开发出来的应用系统能够在不用的环境中自由移植,不需要修改应用系统中的核心功能实现的代码

简单的讲就是:编写一些业务类的时候不需要继承spring特定的类,通过配置完成依赖注入后就可以使用,此时,spring就没有侵入到我业务类的代码里。 或者说 持久化类不用继承任何父类,实现任何接口。这样代码不会被污染。

2.独立于各种应用程序

3.spring的DI机制降低了业务对象替换的复杂性,提高组件间的解耦度。

4.aop支持允许将一些通用的任务如完全,事务,日志等进行集中管理,从而提高更好的复用。

5.spring的orm和dao提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问

6.不强制应用的依赖性。可选用spring部分框架

基本架构:

spring由7个定义良好的木块组成

1.核心容器:核心容器提供spring的基本功能。核心容器的主要组件是BeanFactory。它是工厂模式的实现。BeanFactory使用控制反转模式将应用程序的配置和依赖关系规范与实际的应用程序分开。

2.spring的上下文:spring的上下文是一个配置文件,向spring框架提供上下文信息,包括企业服务,如jndi,ejb;

3.springAOP:通过配置管理特性,直接将面向对面的编程功能集成到spring框架中,容易管理任何对象支持AOP,AOP为基于spring的应用程序中的对象提供了事务管理服务,通过springAOP,不用依赖EJB,就可以将声明性事务管理集成到程序中。

4.springDAO:JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常和不同数据库供应商抛出的错误信息。异常层次简化了错误处理,并且极大的降低了需要编写的异常代码数量(列如打开和关闭的连接)。springdao的面向JDBC的异常遵从通用的DAO异常层次结构。

5.spring ORM:spring框架插入了若干个orm框架。从而提供了orm的对象关系工具,其中包括jdo,hibernate,和ibatisSQL MAP.所有这些都遵从spring的通用事务和dao异常层次结构。

6.spring WEB:web上下文模块建立应用程序上下文模块之上,为基于web的应用程序提供了上下文,所以spring框架支持struts的集成,web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

7.springmvc框架:mvc框架是一个全功能的web应用程序mvc实现。通过策略接口,mvc框架变为高度可配置的,mvc容纳了大量的视图技术。包括jsp,itext等。模型由javabean构成,存放于map;

spring解压后的文件布局

dist:该文件夹下放Spring的jar包,通常只需要Spring.jar文件即可。该文件夹下还有一些类似spring-Xxx.jar的压缩包, 这些压缩包是spring.jar压缩包的子模块压缩包。除非确定整个J2EE应用只需要使用Spring的某一方面时,才考虑使用这种分模块压缩包。通常建议使用Spring.jar

docs:该文件夹下包含spring的相关文档、开发指南及API参考文档。

lib:该文件夹下包含spring编译和运行所依赖的第三方类库,该路径下的类库并不是spring必需的,但如果需要使用第三方类库的支持,这里的类库就是必需要的。

samples:该文件夹下包含Spring的几个简单例子,可作为Spring入门学习的案例。

src:该文件夹下包含Spring的全部源文件,如果开发过程中有地方无法把握,可以参考该源文件,了解底层实现。

test:该文件夹下包含Spring的测试示例。

tiger:该路径下存放关于JDK的相关内容

如果想深入了解spring可去查看相关的资料

1 Spring中的事务处理

2 IoC容器在Web容器中的启动

3 Spring JDBC

4 Spring MVC

5 Spring AOP获取Proxy

6 Spring声明式事务处理

7 Spring AOP中对拦截器调用的实现

8 Spring驱动Hibernate的实现

9 Spring Acegi框架鉴权的实现


https://www.xamrdz.com/web/2ab1942513.html

相关文章: