框架-Spring
项目中都用到了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()


增强方法

CGLIB动态代理

框架-Spring的更多相关文章
- [Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.
前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习 ...
- [Spring框架]Spring开发实例: XML+注解.
前言: 本文为自己学习Spring记录所用, 文章内容包括Spring的概述已经简单开发, 主要涉及IOC相关知识, 希望能够对新入门Spring的同学有帮助, 也希望大家一起讨论相关的知识. 一. ...
- 初识轻量级Java开源框架 --- Spring
初识轻量级Java开源框架 --- Spring 作者:egg 微博:http://weibo.com/xtfggef 出处:http://blog.csdn.net/zhangerqing spri ...
- java DI 框架spring(web)、Guice(web)、Dagger&Dagger2(android)
java DI 框架spring(web).Guice(web).Dagger&Dagger2(android) (待续...)
- 开放源代码的设计层面框架Spring——day01
spring第一天 一.Spring概述 1.1spring概述 1.1.1spring介绍 Spring是分层的Jav ...
- 详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(下)
在上一篇(详解intellij idea 搭建SSM框架(spring+maven+mybatis+mysql+junit)(上))博文中已经介绍了关于SSM框架的各种基础配置,(对于SSM配置不熟悉 ...
- Java框架spring Boot学习笔记(六):Spring Boot事务管理
SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...
- Java框架spring 学习笔记(十四):注解aop操作
回见Java框架spring Boot学习笔记(十三):aop实例操作,这里介绍注解aop操作 首先编写一个切入点HelloWorld.java package com.example.spring; ...
- 跟着刚哥学习Spring框架--Spring容器(二)
Spring容器 启动Spring容器(实例化容器) -- IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化(加载启动),这样才可以从容器中获取Bean的实例并使用. Bean是S ...
随机推荐
- 浅析Java虚拟机结构与机制[转]
本文旨在给所有希望了解JVM(Java Virtual Machine)的同学一个概念性的入门,主要介绍了JVM的组成部分以及它们内部工作的机制和原理.当然本文只是一个简单的入门,不会涉及过多繁杂的参 ...
- 2-4 R语言基础 列表
#列表list > l1 <- list("a",2,10L,3+4i,TRUE) #每个元素没有名字> l1[[1]][1] "a" [[2 ...
- SpringBoot实用技巧札记
目录 如何手工设置SpringBoot内嵌的Tomcat启动端口号(port) 如何解决Eclipse.Properties中文乱码的问题 如何手工设置SpringBoot内嵌的Tomcat启动端口号 ...
- scrollIntoView()的用法
scrollIntoView是一个与页面(容器)滚动相关的API(官方解释),该API只有boolean类型的参数能得到良好的支持(firefox 36+都支持),所以在这里只讨论参数Boolean类 ...
- oracle 在存储过程或函数中得到异常sql
BEGIN SQLSTR := 'UPDATE TBL ...'; EXECUTE IMMEDIATE SQLSTR; EXCEPTION WHEN OTHERS INSERT INTO LOG_TA ...
- js 自己项目中几种打开或弹出页面的方法
自己项目中,几种打开或弹出页面的方法(部分需要特定环境下) var blnTop = false;//是否在顶层显示 ///动态生成模态窗体(通过字符串生成) ///strModalId:模态窗体ID ...
- 页签中加按钮 odoo里面
<notebook> <page string="订"> <field name="line_id" > <tree ...
- 如何在ASP.NET Core中构造UrlHelper,及ASP.NET Core MVC路由讲解
参考文章: Unable to utilize UrlHelper 除了上面参考文章中介绍的方法,其实在ASP.NET Core MVC的Filter拦截器中要使用UrlHelper非常简单.如下代码 ...
- Spark内部流程图
转载自:https://blog.csdn.net/refuil/article/details/52055104
- 20155229《网络对抗技术》Exp5:MSF基础应用
实验内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 一个主动攻击实践,如ms08-067; 一个针对浏览器的攻击,如ms11-050: 一个针对 ...