Spring技术--1

Spring技术

(一)Spring技术介绍

1) Spring的优点

  • Spring定位的领域是众多流行的框架所没有的,他能提供一种方法来管理业务对象。
  • Spring是全面的和模块化的,他有严格的分层体系
  • 是用于测试驱动工程的理想的框架。
  • Spring涉及到在其他的框架中没有考虑到的内容。

2) Spring将改变JavaEE

  • 低侵入式设计,代码污染极低
  • 独立于各种应用服务器
  • Spring的DI机制降低了业务对象替换的复杂性
  • Spring并不完全依赖于其自身,开发者可自由选用spring的部分或全部。

(二)下载并安装Spring

1) 获取Spring的压缩包

v Spring-framework-3.1.0.RELEASE-with-docs.zip

v Spring-framework-3.1.0.RELEASE.zip

2) 压缩文件下的目录结构

  • Dist:该文件夹下包含了Spring的JAR包
  • Docs:存放了Spring的相关文档
  • Projects:存放了Spring分模块化的项目

(三)依赖注入

前言:

Spring能有效的组织JavaEE应用各层的对象。无论是控制层的Action对象,还是业务层的Service对象,还是持久层的Dao对象,都可在Spring的管理下有机的调用并行。Spring将各层的对象以松耦合的方式组织在一起,Action对象无需关心Service的具体实现,Service对象无须关心持久层对象的具体实现,各层对象的调用完全面向接口。当系统需要进行重构的时候,代码的改写量将大大减少。

1) 依赖注入基础

v 依赖注入DI和控制反转Ioc是同一个概念,具体含义是,当某一个角色需要另外一位角色的协助的时候,在传统的程序设计过程中,通常有调用者来创建被调用者的实例。

v 但是在Spring中创建被调用者的工作不再由调用者来完成,通过Spring容器来完成,这就是控制反转Ioc。

v 创建被调用者的实例的工作由Spring容器来完成,然后注入调用者,因此也称依赖注入。

2) 设置注入

v 设置注入也称为Set注入(Setter Injection),是指在接受注入的类中定义一个set方法,并在参数中定义需要注入的元素。

public interface Person{

//定义一个使用斧子的方法

public void useAxe();

}

public interface Axe{

//Axe接口有一个坎的动作

public void chop();

}

public class Zhang implements Person{

private Axe axe ;

public void setAxe(Axe axe){this.axe = axe;}

public void useAxe(){

System.out.println(axe.chop());

}

}

public class StoneAxe implements Axe{

public String chop(){return "斧坎好慢!";}

}

<bean id="chinese" class="org.mmm.app.service.impl.Zhang">

<property name="axe" ref="stoneAxe">

</bean>

<bean id="stoneAxe" class="org.mmm.app.service.impl.StoneAxe">

</bean>

案例总结:

通过上面的案例,我们可以看到,使用Spring的Ioc and DI可以做到真正的面向接口编程。

在使用Ioc需要注意的三个基本要点:

ü 应用程序的各个组件面向接口编程,面向接口编程可以使得各个组件这间的耦合度提升到接口层次,从而有利于项目后期的扩展。

ü 应用程序的各组件不再由程序主动生成,而由Spring容器负责产生,并初始化。

ü Spring采用配置文件,Annotation来管理Bean的实现类,依赖关系,Spring则根据配置文件,利用反射来创建实例,并为之注入依赖关系。

3) 构造注入

构造注入是指通过构造函数来完成依赖关系的设定,而不是通过setter方法 。

public class Zhang implements Person

{

private Axe axe;

public Zhang(){}

public Zhang(Axe axe){this.axe = axe;}

public void useAxe(){

System.out.println(axe.chop());

}

}

<bean id="chinese" class="org.mmm.app.service.impl.Zhang">

<constructor-arg ref="steelAxe">

</bean>

<bean id="stoneAxe" class="org.mmm.app.service.impl.StoneAxe"></bean>

<bean id="steelAxe" class="org.mmm.app.service.impl.SteelAxe"></bean>

构造注入则在创建Bean实例时,已经完成了依赖关系的设置。

(四)Spring容器

1) 相关类的介绍

Spring容器的最为基本的额接口是BeanFactory,功能是配置,创建,管理Bean。它有一个子接口,ApplicationContext,因此称为Spring的上下文。

重点放在ApplicationContext。

ApplicationContext有两个实现类

  • FileSystemXmlApplicationContext

ApplicationContext appContext = new FileSystemXmlApplicationContext(

new String[]{“bean.xml”,”service.xml”}

);

  • ClassPathXmlApplicationContext

ApplicationContext appContext = new ClassPathXmlApplicationContext(

new String[]{“bean.xml”,”service.xml”}

);

2) Spring Ioc容器

问题:

① 什么是Ioc容器?

我们经常接触的BeanFactory和ApplicationContext都可以看成是容器的具体表现形式。

② 它在Spring中到底长什么样?

如果深入到Spring的实现去看,会发现Ioc容器实际上代表着一系列功能各异的容器产品。只是容器的功能有大有小,有各自的特点。

③ 他需要满足的基本特性是什么?

他需要满足BeanFactory这个接口的基本定义

3) BeanFactory对Ioc容器的功能定义

Ioc容器的基本接口是由BeanFactory来定义的,也就是说BeanFactory定义了Ioc容器的最基本的形式。

BeanFactory是怎样定义Ioc容器的基本接口

4) XmlBeanFactory的工作原理

ClassPathResource res = new ClassPathResource(“beans.xml”);

DefaultListableBeanFactory factory = new DefaultListableBeanFactory();

XmlBeanDefinitationReader reader = new XmlBeanDefinitationReader(factory);

reader.loadBeanDefinitions(res);

在使用Ioc容器的时候,要遵循如下4个步骤

1,创建Ioc配置文件的抽象资源,这个抽象资源包括BeanFinition的定义信息

2,创建一个BeanFactory,这里使用DefaultListableBeanFactory

3,创建一个载入BeanDefinition的读取器,这里使用XmlBeanDefinitionReader来载入XML文件形式的BeanDefinition,通过一个回调配置给BeanFactory。

4,从定义好的资源位置读入配置信息,具体的解析过程是由XmlBeanDefinitionReader来完成,完成整个载入和注册bean定以后,需要的Ioc容器就建立起来了,这时候就可以使用Ioc容器了。

时间: 2024-07-30 12:24:00

Spring技术--1的相关文章

深入探索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 技术(二) ----- IOC

spring 技术 ---  控制反转(IOC)  也叫依赖注入(DI) (1)基于setter方法的注入 (2)基于构造函数的注入 (3)Bean之间的引用 1. 新建一个Java Project.名为springtest2.然后新建一个package.名为com.gxcme.springtest2. 2. 加入spring框架. 3.新建一个Interface.名为helloInterface.java. 4.新建一个class.名为helloImpl.java.继承helloInterfa

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

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

深入探索spring技术内幕(四): 剖析@Resource注解实现原理与注解注入

一.@Resource注解原理 @Resource可以标注在字段或属性的setter方法上 1.  如果指定了name属性, 那么就按name属性的名称装配; 2. 如果没有指定name属性, 那就按照默认的名称查找依赖对象; 3. 如果按默认名称查找不到依赖对象, 那么@Resource注解就会回退到按类型装配; ① 先写一个自己的@MyResource: import java.lang.annotation.Retention; import java.lang.annotation.Re

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

一.Spring是什么? Spring是一个开源的控制反转 ( IoC ) 和面向切面 ( AOP ) 的容器框架, 它的主要目的是简化企业开发. 二.控制反转(IoC) 控制反转: 所谓的控制反转就是应用本身不负责依赖对象的创建及维护, 依赖对象的创建及维护是由外部容器负责的. 这样控制权就由应用转移到了外部容器, 控制权的转移就是所谓的反转. public class PersonServiceBean { // 自己new一个对象 private PersonDao personDao =

深入探索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 AOP面向切面编程

一. AOP一些概念 Aspect( 切面 ): 指横切性关注点的抽象即为切面, 它与类相似, 只是两者的关注点不一样, 类是对物体特征的抽象, 而切面横切性关注点的抽象. joinpoint( 连接点 ): 指那些被拦截到的点. 在spring中, 这些点指的是方法, 因为spring只支持方法类型的连接点, 实际上joinpoint还可以是field或类构造器) Pointcut( 切入点 ): 指我们要对那些joinpoint进行拦截的定义. Advice( 通知 ): 指拦截到joinp

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技术内幕:SpringIOC原理学习总结

前一段时候我把Spring技术内幕的关于IOC原理一章看完,感觉代码太多,不好掌握,我特意又各方搜集了一些关于IOC原理的资料,特加深一下印象,以便真正掌握IOC的原理. IOC的思想是:Spring容器来实现这些相互依赖对象的创建.协调工作.对象只需要关系业务逻辑本身就可以了. SpringIOC容器的执行步骤是: 1.资源定位,即首先要找到applicationContext.xml文件 2.BeanDefinition的载入,把XML文件中的数据统一加载到BeanDefinition中,方