Spring3学习笔记

来源:互联网 发布:淘宝二手回收手机骗局 编辑:程序博客网 时间:2024/06/05 08:06

Spring3学习笔记

  • Spring3学习笔记
    • 一Spring简介
    • 二IOC详解
    • 三DI
      • 一注入方式
    • 六AOP面向切面编程
      • 一AOP基础
      • 二基于配置Schema的AOP

一、Spring简介

  1. Spring 是一个开源的轻量级应用开发框架。使用Spring可以简化开发流程,Spring可以帮我们管理对象和依赖关系,提供通用日志记录、性能统计、安全控制、事务处理等。

    • Ioc容器
    • AOP
    • 事务管理
    • JDBC
    • MVC框架
    • and so on
  2. 非侵入式设计:应用程序不需继承框架的类或接口即可使用框架提供的功能。方便代码重用和框架切换。

  3. POJO:简单JAVA对象,只包含业务逻辑或持久化逻辑。
  4. 容器:提供运行环境,如Tomcat;管理对象生命周期和依赖关系,如Spring。
  5. AOP:AOP是Aspect Oriented Programming的缩写,意思是面向切面编程。抽取通用的代码逻辑,在需要的时候动态织入到程序中去。

二、IOC详解

  1. IOC:控制反转,它不是一项技术,而是一种设计思想。IOC容器控制了对象的生命周期和依赖关系,将对象的获取方式反转了。
  2. DI:依赖注入,它是IOC的同一个概念的不同角度描述
  3. IOC容器:具有依赖注入功能的容器,Spring中的是BeanFactory,其实现类有ApplicationContext、WebApplicationContext、ClassPathXMLApplicationContext、FileSystemXMLApplicationContext。
  4. Bean:由IOC容器管理的对象叫Bean。
  5. IOC容器使用BeanDefinition类来表示bean在xml文件中的定义信息。主要包含:
    • 全限定名
    • Bean在容器中的行为,包括作用域、是否惰性初始化、生命周期
    • Bean的创建方式:构造器、工程方法
    • Bean依赖关系,即对其他Bean的引用
  6. Bean命名:id是唯一标识符;只有name时,name也可做标识符,可以有别名(alias)
  7. Bean定义方式:

    • 无参构造器:

      <bean name="bean1" class="cn.javass.spring.chapter2.HelloImpl2"/>   
    • 有参构造器:

       <bean name="bean2" class="cn.javass.spring.chapter2.HelloImpl2">  <!-- 指定构造器参数 -->       <constructor-arg index="0" value="Hello Spring!"/>  </bean>  
    • 静态工厂方式

      <!-- 使用静态工厂方法 -->  <bean id="bean3" class="cn.javass.spring.chapter2.HelloApiStaticFactory" factory-method="newInstance">      <constructor-arg index="0" value="Hello Spring!"/>  </bean>
    • 实例工厂方式

      <!—1、定义实例工厂Bean -->  <bean id="beanInstanceFactory"  class="cn.javass.spring.chapter2.HelloApiInstanceFactory"/>  <!—2、使用实例工厂Bean创建Bean -->  <bean id="bean4"  factory-bean="beanInstanceFactory"   factory-method="newInstance">      <constructor-arg index="0" value="Hello Spring!"></constructor-arg>  </bean> 
  8. 假如A类依赖B接口对象,这时B接口有多个实现类注册到了IOC容器中,在注入的时候,spring会报错:重复定义

  9. Spring的IOC有两层含义:Bean依赖容器和容器注入Bean的依赖资源。好处如下:

    • 动态替换Bean依赖对象,程序更灵活;
    • 更好实践面向接口编程,代码更清晰;
    • 更好实践优先使用对象组合,而不是继承;
    • 增加Bean可复用性;

三、DI

(一)注入方式

  1. 构造器注入
    可分为三种:根据参数索引注入、根据参数类型注入、根据参数名注入,其中索引注入可靠性最高,参数类型注 入中除了制定类型外,还要按照构造函数的参数列表顺序来注入。
    构造器注入是需要相应的构造函数的,Spring的BeanFactory会根据配置文件中配置的参数(即constructor)的个数、类型等属性来匹配构造器,如果构造器匹配失败则抛出异常

    <!-- 直接用构造器进行类属性的注入 ,属性映射使用相应构造器的参数列表的index进行映射--><bean id="byIndex" class="com.rambo.domain.Person">    <constructor-arg index="0" value="Hello World!" />    <constructor-arg index="1" value="1" /></bean><!--使用静态工厂类来调用构造器进行注入 ,属性映射使用相应构造器的参数列表的index+type进行映射 --><bean id="byType" class="com.rambo.domain.PersonStaticFactory" factory-method="newInstance">    <constructor-arg type="java.lang.String" value="Hello World!" />    <constructor-arg type="int" value="2" /></bean><!--使用实例工厂类来调用构造器进行注入 ,属性映射使用相应构造器的参数列表的index+name进行映射,不建议使用 --><bean id="byName" class="com.rambo.domain.PersonFactory" factory-method="newInstance">    <constructor-arg name="message" value="Hello World!" />    <constructor-arg name="index" value="3" /></bean>
  2. setter注入
    其先通过默认构造器实例化Bean以后,再通过setter方法将属性设值,所以该类的默认构造器不能被覆盖。

    <!-- 通过setter方式进行依赖注入 -->  <bean id="bean" class="cn.javass.spring.chapter3.HelloImpl4">      <property name="message" value="Hello World!"/>      <property name="index">          <value>1</value>      </property>  </bean>

    可以看出来,value如果用简写的方式,指定的全是字符串,类型转换的工作有Spring容器来处理,如果转换出错将抛出相应的异常。
    Spring类型转换系统对于boolean类型进行了容错处理,除了true/false外,还可以用yes/no、on/off、1/0来表示。

六、AOP–面向切面编程

(一)AOP基础

  1. AOP:面向切面编程,是一种编程范式。
  2. 模板方法:接口定义方法fun(),实现类A实现fun(),并定义模板方法funA(), 子类继承A,并实现funA()。
  3. AOP相关概念:
    • 关注点:可以认为是所关注的任何东西,如支付组件;
    • 关注点分离:将问题细化为不可分割的组件,如支付组件和日志组件;
    • 横切关注点:一个组件无法完成所需的功能,需要其他组件协助完成,如日志组件横切于支付组件;
    • 织入:横切关注点分离后,需要通过某种技术将横切关注点融合到系统中来完成需要的功能;织入可能发生在编译期、加载期、运行期等。
    • 横切关注点有很多,如非业务的:日志、事务处理、缓存、性能统计、权限控制;也有可能业务的。
  4. AOP的作用:
    • 分离横切关注点并织入;
    • 完善OOP;
    • 降低组件和模块之间的耦合性;
    • 使系统容易扩展;
    • 更好地复用组件。
  5. AOP基本概念:
    • 连接点(Jointpoint):表示在什么地方进行横切关注点的插入,如:类初始化、方法执行、方法调用、字段调用、异常处理等,Spring只支持方法执行的连接点,在哪里干
    • 切入点(Pointcut):连接点的集合,Spring支持perl5正则表达式和AspectJ切入点模式,默认使用AspectJ语法,在哪儿干的集合
    • 通知(Advice):在连接点上执行的行为,包括前置通知(before advice)后置通知(after advice)环绕通知(around advice),Spring通过代理模式实现AOP,并通过拦截器模式以环绕连接点的拦截器链织入通知,干什么
    • 方法/切面(Aspect):横切关注点的模块化,如日志组件。Spring中可以使用Schema和@AspectJ方式进行组织实现,在哪儿干和干什么的集合
    • 引入(inter-type declaration):内部类型声明,为已有的类添加新的字段/方法。
    • 目标对象(Target Object):需要织入横切关注点的对象,亦作”被通知对象”,Spring中是被代理对象,即委托对象,对谁干
    • 织入(Weaving):将切面应用到目标对象从而创建出AOP代理对象的过程,可以在编译期、类装载期、运行期进行。

(二)基于配置(Schema)的AOP

0 0
原创粉丝点击