Spring的解读

一. Spring的技术概述
1.1 什么是Spring?
Spring是分层 的JavaEE full-stack(一站式)轻量级开源框架.
Java程序在服务器端分为三册(Web)层,业务逻辑层,数据访问层.Struts是表现层MCV框架
Hibernate是数据访问层ORM框架.

Spring框架中包括javaEE三层每一层的解决方案(一站式)
web层: Spring mvc
业务层: spring Bean管理 AOP 事物管理
持久层: Spring JDBCTemplate ORM模块

1.2Spring的核心
IOC控制反转和AOP面向切面的编程.

1.3Spring框架的优点
*方便解耦,简化开发;
Spring 就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
*AOP编程的支持:
Spring提供面向切面编程,可以方便是吸纳过对程序进行权限拦截,运行监控等功能
*声明事物的支持
只需配置就可以完成对事物的管理,而无需手动编程
*方便程序测试
Spring对Junit4支持,可以通过注解方便的测试spring
*方便集成各种优秀程序
Spring不排斥各种优秀的开源框架,其内部提供了各种优秀的框架(如:Struts,hibernate,MyBatis,Quartz)的直接支持
*降低JavaAPI的使用难度
Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
1.4 Spring包含哪些东西

  • 核心技术: IOC 和AOP
  • 数据访问(持久层解决方案)
  • Web层解决方案 Spring MVC
  • 集成(整合其他开源框架)

    2 .Spring控制反转快速入门

    2.1理解IOC控制反转和DI依赖注入
    **IOC:**Inverse of Control 反转控制的概念. 将原本在程序中手动创建对象的控制权,交由Spring框架管理,就是创建的对象控制权被反转到Spring框架中
    DI:Dependency Injection:依赖注入,在spring框架中负责创建Bean对象时,动态的讲依赖注入到Bean组件中

    2.2 什么是IOC容器?
    依赖注入,用来映射依赖,管理对象创建和生存 周期(DI框架).Spring就是一个IOC 框架.它不是技术,而是一种思想.在Java中,IOC意味着将你设计好的对象交给容器控制,而反转是由容器来帮忙床架及注入依赖对象,反转后正真掌握业务逻辑的是我们bean对象.
    2.3 Spring中的Bean配置
    配置形式: 基于XML文件配置方式,基于注解的方式.
    在spring中的IOC容器配置Bean,在xml文件中通过Bean节点来配置bean.

<!--配置bean-->
<bean id="helloWorld" class="">
    <property name="user" value="Curry"></property>
</bean>

id: bean的名称,在IOC容器中国必须是唯一的.
在SpringIOC容器读取 Bean配置创建Bean之前,必须对它实例化.只有在容器实例化,才可以从IOC容器里获取Bean实例并使用.
通过ApplicationContext接口:
WrbApplication是专门为WEB应用而准备的,它允许从相对于WEB根目录的路径中完成初始化工作.)
从IOC容器中获取Bean,调用ApplicationContext的getbean()方法.
2.4三种实例化Bean的方式
1) 使用类构造器实例化默认(默认无参数)

<!--id 为bean定义的标识,class是Bean完整类名,默认调用无参数构造器-->
<bean id="bean1" class="com.tz.spring.beans.instance.Bean1"></bean>

2) 使用静态工厂方法实例化(简单工厂模式)

<!-- 静态工厂方法class 是工厂完整类名-->
<bean id="bean2" class="com.tz.spring.bean2.instance.Bean2Factory" factory-metnod="getBean2"</bean>

3) 使用实例工厂方法实例化(工厂方法模式)

<!--实例工厂方法,需要创建目标Bean实例-->
<bean id="bean3Factory" class="com.tz.spring.bean2.instance.Bean3Factory"></bean>
<bean name="bean3" factory-bean="bean3Factory" factory-metnod="getBean3"></bean>

2.5 依赖注入的方式
Spring 支持3种依赖注入的方式:
属性注入: 即通过setter方法注入Bean的属性或依赖对象,注入使用通过property元素,使用 name 属性指定 Bean 的属性名称,value 属性或 value 子节点指定属性值
构造器注入: 通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用。构造器注入在 constructor-arg 元素里声明属性, constructor-arg 中没有 name 属性
接口注入:用的不多,不推荐使用,就不介绍了;

  • 注解配置Bean及SpringJdbcTemplate详解
    3.1 XML配置里的Bean自动装配
    Spring IOC容器可以自动装配Bean,需要做的仅仅是在bean的autowred属性里指定装配的模式.

  • byType(根据类型自动装配): 若IOC容器中有多个与目标Bean类型一致的Bean,在这种情况下,Spring将无法判定那个Bean最合适改属性,所以不能自动配置.

  • byName(根据自动配置): 必须将目标Bean的名称和属性名称设置完全相同.
  • constructor(通过构造穷自动装配): 当Bean中存在多个构造器是,此种自动装配更复杂;

3.2 Spring IOC的总结
Spring的IOC(控制反转)是通过依赖注入(DI)来实现的.
优点:

  • 大量减少了对象的创建和管理,是代码层次更加清晰
  • Spring的IOC容器是一个轻量级的容器,没有侵入性(不依赖容器的API),不需要实现一些特殊的接口,这是一个合理的设计的基本要求
  • 鼓励我们面向接口编程
  • 减少代码的耦合,将耦合的部分推倒配置文件中,如果他们的关系 发生了改变,只需改变配置文件.
  • 提供了aop声明式的服务能力

    3.3基于注解方式的配置Bean
    定义component注解还有三种方式
    @Repository: 主要是声明DAO的类组件
    @Service: 主要声明service服务类
    @Controller : 主要是声明控制层(Spring MVC)
    @Resource: Java注解,迷人是以byName方式注入,byName找不到的话,在用byType去匹配
    @Autowired: Spring的注解,默认是以byType注入,如果有多个实现类,他在用byName方式去匹配
    @Autowired @Qualified: Spring的注解,两个一起用,指定用byName的方式进行匹配

    1. AOP概念及SpringAOP的实现
      4.1 AOP的概念和原理
      AOP:面向切面编程,是一种新的方法论,是对传统的OOP的补充.
      4.2 什么是AOP?
      AOP是面向切面的标称的简写
      AOP的实现可以把业务逻辑和系统升级的服务进行隔离,是业务逻辑跟各个系统级服务的耦合度降低,从而提高程序的重用性和开发效率
      4.3 怎么样实现AOP
      AOP的底层实现原理都是动态定理.
      每一个动态代理类都必须要实现InvocationHandler这个接口,并且每个代理类的实例都关联到一个每一个动态代理类都必须要实现InvocationHandler这个接口,并且每个代理类的实例都关联到了一个handler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由InvocationHandler这个接口的 invoke 方法来进行调用。我们来看看InvocationHandler这个接口的唯一一个方法 invoke 方法。
      4.4 AOP的一些专业术语

      • 切面(Aspect) : 横切关注点。就是交叉在各个业务逻辑中的系统服务(被模块化),类似于安全验证、事务处理、日志记录都可以理解为切面。

      • 织入(weaving) : 就是将切面代码插入到目标对象某个方法的过程,相当于我们在jdk动态代理里面的 invocationHandler接口方法的内容 。

      • 连接点(JointPoint) : 理论上可能被切面织入的所有方法 ,比如addUser(), searchUser()的方法前、方法后或抛异常后等等。通常所有方法都可以被称为连接点。

      • 切入点(PointCut) : 就是实际上被切面织入的方法。

      • 目标对象(target) : 就是切入点和连接点所属的类 UserDaoImpl,被通知的对象。

      • 通知(Advice) : 就是切面的实现,切面必须要完成的工作。

      • 代理(Proxy) : 向目标对象应用通知之后创建的对象。

      • 顾问(Advisor) : 其实就是通知的一个封装和延伸,可以将通知以更为复杂的方式织入到某些方法中
        将切面织入到目标对象的连接点方法,使连接点成为切入点
        4.5传统的Spring AOP 提供的五类 Advice
        前置通知org.springframework.aop.MethodBeforeAdvice

      • 在目标方法执行前实施
        后置通知 org.springframework.aop.AfterReturningAdvice
      • 在目标方法执行后实施
        环绕通知 org.aopalliance.intercept.MethodInterceptor
      • 在目标方法执行前后实施
        异常抛出通知 org.springframework.aop.ThrowsAdvice
      • 在方法抛出异常后实施
        引介通知 org.springframework.aop.IntroductionInterceptor (课程不讲了解)
      • 在目标类中添加一些新的方法和属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值