项目中都用到了Spring、Mybatis、SpringMVC框架,首先来谈一谈Spring框架,Spring框架以IOC、AOP作为主要思想。

  IOC----控制反转

   IOC的全称为Inversion of Control 即控制反转,这是一种思想,而不是只发具体的技术。传统方式是通过程序直接new来创建一个对象,而IOC方式是把对象的创建交由容器来管理。传统方式利用new来创建对象使得类与类之间有严重的依赖关系,那通过IOC方   式,我们可以将类之间的耦合关系解开,类与类之间松散耦合。

   通俗来说,IOC是利用Spring来控制对象的生命周期和对象之间的关系。在传统的方式中,在一个对象中,如果要使用另外的对象,那么就需要new一个另外的对象,用完后再销毁这个对象。类似于找妹子,我们去找看对眼的妹子,然后找她们要微信,求认识,然后进一步的展开追求。那IOC呢,就相当于一个媒婆,它是你找对象的中间媒介,这个媒婆手头有很多适龄男女的资料,你可以向她提关于女朋友的要求,她会为你找到一个符合你要求的对象。如果媒婆找的人不合适,我们就抛异常。

   具体说来呢,就是所有的类都会在Spring容器中进行登记,告诉Spring容器你是什么,你需要什么,然后spring会在系统运行到适当的适合把你需要的东西给你,同时也把你交给需要你的东西。所有类的创建、销毁都交给spring来控制,即控制对象生命周期的不再是引用它的对象,而是spring。对于具体对象而言,原来是它控制其他对象,现在是所有对象都被spring控制,故叫做控制反转。

    DI  依赖注入

   在系统运行中,动态的向某个对象提供它所需要的其他对象,这是通过DI(Dependency Injection)实现的。如之前对象A需要操作数据库,那么它就需要一个Connection对象,那现在spring会帮助我们在程序运行时构造一个Connection.spring就是通过反射来实现注入的。

   AOP----面向切面编程

  简单说来,AOP通过动态代理的方式,不改变源代码逻辑,在源代码基础上进行功能增强。

  传统的面向对象编程(OOP)是纵向的编程,基于子类继承父类,建立起一种对象的层次结构,适用于纵向关系,而对于一些像日志、安全性、异常处理等与对象核心功能无关的模块,OOP则没有用武之地,例如一个项目已经上线运行,但是想在这个项目代码中加入日志功能,那停掉服务器修改代码是一项得不偿失的事情了,这时候就到了AOP发挥功能的时候了。

    AOP的几个核心概念:    

    1、横切关注点

      对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点

    2、切面(aspect)

      类是对物体特征的抽象,切面就是对横切关注点的抽象

    3、连接点(joinpoint)

      被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器

    4、切入点(pointcut)

      对连接点进行拦截的定义

    5、通知(advice)

      所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类

    6、目标对象

      代理的目标对象

    7、织入(weave)

      将切面应用到目标对象并导致代理对象创建的过程

    8、引入(introduction)

      在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段

    

      AOP的底层实现是基于动态代理的,动态代理技术分为两种:

       1.JDK的动态代理,这种方式要求有接口

       2.CGLIB的动态代理,这种方式没有接口,采用生成类的子类的方式

      使用JDK方式生成动态代理举例:

        在接口UserDao的实现类UserDaoImpl中定义两个方法save()和update()

        

        

       现在要在中间模拟记录日志功能,有接口,用jdk的动态代理方式
              构建工具类MyProxyUtils.java,InvocationHandler()为内部类

      

      增强方法

      

      CGLIB动态代理

      

      

框架-Spring的更多相关文章

  1. [Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

    前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习 ...

  2. [Spring框架]Spring开发实例: XML+注解.

    前言: 本文为自己学习Spring记录所用, 文章内容包括Spring的概述已经简单开发, 主要涉及IOC相关知识, 希望能够对新入门Spring的同学有帮助, 也希望大家一起讨论相关的知识. 一. ...

  3. 初识轻量级Java开源框架 --- Spring

    初识轻量级Java开源框架 --- Spring 作者:egg 微博:http://weibo.com/xtfggef 出处:http://blog.csdn.net/zhangerqing spri ...

  4. java DI 框架spring(web)、Guice(web)、Dagger&Dagger2(android)

    java DI 框架spring(web).Guice(web).Dagger&Dagger2(android) (待续...)

  5. 开放源代码的设计层面框架Spring——day01

    spring第一天     一.Spring概述         1.1spring概述             1.1.1spring介绍                 Spring是分层的Jav ...

  6. 详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(下)

    在上一篇(详解intellij idea 搭建SSM框架(spring+maven+mybatis+mysql+junit)(上))博文中已经介绍了关于SSM框架的各种基础配置,(对于SSM配置不熟悉 ...

  7. Java框架spring Boot学习笔记(六):Spring Boot事务管理

    SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.

  8. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

  9. Java框架spring 学习笔记(十四):注解aop操作

    回见Java框架spring Boot学习笔记(十三):aop实例操作,这里介绍注解aop操作 首先编写一个切入点HelloWorld.java package com.example.spring; ...

  10. 跟着刚哥学习Spring框架--Spring容器(二)

    Spring容器 启动Spring容器(实例化容器) -- IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化(加载启动),这样才可以从容器中获取Bean的实例并使用.  Bean是S ...

随机推荐

  1. 【2017下集美大学软工1412班_助教博客】团队作业4——Alpha冲刺日志公示

    作业要求 团队作业4--第一次项目冲刺(Alpha版本) 团队评分结果和评分标准 检查项 总分 会议内容 代码签入 心得体会或其他记录 燃尽图 会议照片 评论区反馈 组别 分值 10 2 2 2 1 ...

  2. Atcoder 水题选做

    为什么是水题选做呢?因为我只会水题啊 ( 为什么是$Atcoder$呢?因为暑假学长来讲课的时候讲了三件事:不要用洛谷,不要用dev-c++,不要用单步调试.$bzoj$太难了,$Topcoder$整 ...

  3. str操作方法

    s = 'dsj,fhk,je,f' # s1 = s.split(',') # print(s1) s = 'aleX leNb' s1 = s.strip() print(s1) s2 = s[2 ...

  4. MP实战系列(十六)之性能分析插件

    性能分析拦截器,用于输出每条 SQL 语句及其执行时间. 虽然使用阿里的Druid连接池可以完成这个目的,但是,我们一般认为,目前的组件能够达到这个目的,尽量使用目前的组件,因为修改配置和引入第三方库 ...

  5. FileUriExposedException_Android7.0适配

    一. FileUriExposedException的解决 问题 由于在Android7.0上,google使用了新的权限机制,所以导致在调用相机的时候,如果传递的URI为”file://”类型,的系 ...

  6. Python2.7-struct模块

    struct模块 处理二进制数据,与C语言交互,可以较为方便的对C语言的struct类型和python中的数据进行转换 主要是用于将int,char之类的C语言中基础数据pack至一个二进制流的字符串 ...

  7. JAVA框架 Mybaits 核心配置

    一:mybaits的核心配置文件:SqlMapConfig.xml 配置文件中需要关注的属性: 二.properites属性:一般引用配置文件(properites文件)比如:数据库的配置.我们可以编 ...

  8. maven使用出现的错误

    修改mvn archetype:create  改成mvn archetype:generate 刚开始学习用Maven, 装好了以后生成一个新的project mvnarchetype:genera ...

  9. pdflush机制

    在做进程安全监控的时候,拍脑袋决定的,如果发现一个进程在D状态时,即TASK_UNINTERRUPTIBLE(不可中断的睡眠状态),时间超过了8min,就将系统panic掉.恰好DB组做日志时,将整个 ...

  10. 你也可以自己写一个可爱 & 小资风格的Android加载等待自定义View - 转

    http://blog.csdn.net/carson_ho/article/details/77712072