深入探索spring技术内幕(一): spring概述

一、Spring是什么?

Spring是一个开源的控制反转 ( IoC ) 和面向切面 ( AOP ) 的容器框架, 它的主要目的是简化企业开发.

二、控制反转(IoC)

控制反转: 所谓的控制反转就是应用本身不负责依赖对象的创建及维护, 依赖对象的创建及维护是由外部容器负责的.

这样控制权就由应用转移到了外部容器, 控制权的转移就是所谓的反转.

public class PersonServiceBean {
	// 自己new一个对象
	private PersonDao personDao = new PersonDaoBean();
	public void save(Person person) {
		personDao.save(person);
	}
}

public class PersonServiceBean {
	// 由spring通过set方法注入对象
	private PersonDao personDao;
	public void save(Person person) {
		personDao.save(person);
	}
	public void setPersonDao(PersonDao personDao) {
		this.personDao = personDao;
	}
}

三、依赖注入(DI)

依赖注入: 所谓的依赖注入就是在运行期, 由外部容器动态地将依赖对象注入到组件中.

为了能更好的理解依赖注入, 我们不妨问自己两个问题:

1. 谁依赖谁? 为什么需要依赖?

当然是应用程序依赖于IoC容器, 应用程序需要IoC容器来提供对象需要的外部资源.

2. 谁注入谁? 注入了什么?

当然是IoC容器注入应用程序某个对象, 注入对象所需要的外部资源(对象, 资源, 常量数据).

其实IoC和DI是统一个概念的不同角度描述, 相对IoC而言, ‘依赖注入‘ 明确描述了被注入对象依赖IoC容器配置依赖对象.

四、为何要用Spring

在项目中引入spring可以给我们带来以下好处:

1. 降低组件之间的耦合度, 实现软件各层之间的解耦.

2. 可以使用容器提供的众多服务, 如: 事务管理服务, 消息服务等. 当我们使用容器管理事务时, 开发人员就不再需要手动控制事务,

也不需要处理复杂的事务传播.

3. 容器提供单例模式支持, 开发人员不再需要自己编写实现代码.

4. 容器提供AOP技术, 利用它很容易实现如权限控制等功能.

5. 容器提供众多辅助类如: JdbcTemplate、HibernateTemplate等, 使用这些类能够加快应用的开发.

6. spring为主流的应用框架提供了集成支持, 如集成Hibernate、JPA、Struts等, 方便我们的开发.

五、轻量级与重量级

spring属于轻量级框架还是重量级框架?

划分一个应用属于轻量级还是重量级, 主要看他使用了多少服务. 使用的服务越多, 容器就要为普通java对象做的工作越多,

必然会影响到应用的发布时间及运行性能.

对于spring容器, 它提供了很多服务, 但这些服务并不是默认为应用打开的, 应用需要某种服务, 还需要指明使用该服务, 如果应用使用的服务很少,

如: 只使用spring核心服务, 那么我们可以认为此时应用属于轻量级的, 如果应用使用了spring提供的大部分服务,这时应用就属于重量级的.

目前EJB容器就因为它默认为应用提供了EJB规范中所有的功能, 所以它属于重量级.

深入探索spring技术内幕(一): spring概述

时间: 2024-08-24 21:02:36

深入探索spring技术内幕(一): spring概述的相关文章

深入探索spring技术内幕(八): Spring +JDBC组合开发和事务控制

一. 配置数据源 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/> <property name="

SPRING技术内幕,Spring源码深度解析

 SPRING技术内幕,Spring源码深度解析 SPRING技术内幕:深入解析SPRING架构与设计原理(第2版)[带书签].pdf: http://www.t00y.com/file/78131650 Spring源码深度解析 [郝佳编著] sample.pdf: http://www.t00y.com/file/78131634 [jingshuishenliu.400gb.com]Spring Data.pdf: http://www.t00y.com/file/78256084 [

Spring技术内幕:Spring AOP的实现原理(二)

**二.AOP的设计与实现 1.JVM的动态代理特性** 在Spring AOP实现中, 使用的核心技术时动态代理,而这种动态代理实际上是JDK的一个特性.通过JDK的动态代理特性,可以为任意Java对象创建代理对象,对于具体使用来说,这个特性使通过Java Reflection API来完成的.在此之前先简要复习一下Proxy模式,其静态类图如下: 我们可以看到有一个RealSubject,这个对象是目标对象,而在代理模式的设计中,会设计一个接口和目标对象一致的代理对象Proxy,它们都实现了

Spring技术内幕:Spring AOP的实现原理(一)

一.SpringAOP的概述 1.AOP概念 AOP是Aspect-Oriented Programming(面向切面编程)的简称.维基百科的解释如下: Aspect是一种新的模块化机制,用来描述分散在对象.类或函数中的横切关注点(crosscutting concern).从关注点中分离出横切关注点是面向切面的程序设计的核心.分离关注点使解决特定领域问题的代码从业务逻辑代码中独立出来,业务逻辑的代码中不再含有针对特定领用问题代码的调用,业务逻辑同特定领域问题的关系通过切面来封装.维护,这样原本

Spring技术内幕:Spring AOP的实现原理(五)

7.Advice通知的实现 AopProxy代理对象生成时,其拦截器也一并生成.下面我们来分析下Aop是如何对目标对象进行增强的.在为AopProxy配置拦截器的实现中,有一个取得拦截器配置过程,这个过程由DefaultAvisorChainFactory实现的,而这个工厂类负责生成拦截器链,在它的getInterceptorsAndDynamicInterceptionA- dvice方法中,有一个适配器的注册过程,通过配置Spring预先设计好的拦截器,Spring加入了它对Aop实现的处理

Spring技术内幕:Spring AOP的实现原理(三)

生成SingleTon代理对象在getSingleTonInstance方法中完成,这个方法时ProxyFactoryBean生成AopProxy对象的入口.代理对象会封装对target目标对象的调用,也就是说针对target对象的方法调用行为会被这里生成的代理对象所拦截.具体的生成过程是首先读取ProxyFactoryBean配置,为生成代理对象做好准备.Spring通过AopProxy类来具体生成代理对象.对于getSingleTonInstance方法中生成代理对象的过程如下: /** *

Spring技术内幕:Spring AOP的实现原理(四)

4.目标方法的调用 如果没有拦截器会对目标对象方法直接调用.对于JDKDynamicAopProxy代理对象是通过AopUtils使用反射机制实现的.在这个调用方法中首先得到调用方法的反射对象,然后使用invoke启动对方法反射对象的调用.源码如下: /** * Invoke the given target via reflection, as part of an AOP method invocation. * @param target the target object * @para

深入探索spring技术内幕(二): 剖析spring管理Bean的原理与配置

求二叉树的宽度和深度 给定一个二叉树,获取该二叉树的宽度和深度. 例如输入 a / \ b c / \ / \ d e f g 返回3. 详细描述: 接口说明 原型: int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight) 输入参数: head 需要获取深度的二叉树头结点 输出参数(指针指向的内存区域保证有效): pulWidth 宽度 pulHeight 高度 返回值: 0 成功 1 失败

深入探索spring技术内幕(六): JDK动态代理和cglib生成代理

[ JDK生成代理 ] JDK中给我们提供了一个Proxy类可以动态的给我们生成代理. 假定我们要做一个权限管理系统, 需要控制用户对某一个方法的访问. 如果user为null, 那么不让用户访问save方法. ① 接口类: PersonService public interface PersonService { public void save(); } ② 实现类: PersonServiceImpl public class PersonServiceImpl implements P