浅谈spring--AOP与IOC / DI
Spring 是一个开源框架,主要优势是其分层架构,分层架构允许选择使用哪一个组件。
七大模块组成包含Spring Core,AOP,ORM,DAO,Web,Context,Web MVC。 Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 对象的方式。组件都可以单独存在,或者与其他一个或多个模块联合实现。
Spring Core
Core模块是Spring的核心类库,Spring的所有功能都依赖于该类库,Core主要实现IOC(控制反转)功能,Spring的所有功能都是借助IOC实现的。
AOP
AOP模块是Spring的AOP库,提供了AOP(拦截器)机制,并提供常用的拦截器,供用户自定义和配置。 AOP是OOP的延续
主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等
- ORM
Spring 的ORM模块提供对常用的ORM框架的管理和辅助支持
- DAO
Spring 提供对JDBC的支持,对JDBC进行封装,
- WEB
WEB模块提供对常见框架如Struts1,WEBWORK(Struts 2),JSF的支持,Spring能够管理这些框架
- Context
Context模块提供框架式的Bean访问方式,其他程序可以通过Context访问Spring的Bean资源,相当于资源注入。
- Web MVC
WEB MVC模块为Spring提供了一套轻量级的MVC实现,在Spring的开发中,我们既可以用Struts也可以用Spring自己的MVC框架,相对于Struts,Spring自己的MVC框架更加简洁和方便。
- spring 的优点:
1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦
2.可以使用容易提供的众多服务,如事务管理,消息服务等
3.容器提供单例模式支持
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
5.容器提供了众多的辅助类,能加快应用的开发
6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring属于低侵入式设计,代码的污染极低
8.独立于各种应用服务器
9.spring的DI机制降低了业务对象替换的复杂性
10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部
spring有两个核心模块:
什么是DI / IOC
IOC控制反转主要强调的是程序之间的关系是由容器(spring)控制的,容器控制对象,控制了对外部资源的获取。而反转即为,在传统的编程中都是由我们创建对象获取依赖对象,而在IOC中是容器帮我们创建对象并注入依赖对象,正是容器帮我们查找和注入对象,对象是被获取,所以叫反转。
可以理解为当一个对象a调用另一个对象b的时候,传统的写法是在对象a中把对象b实例化,但是在spring中,a和b对象都是spring初始化并管理的,通过set方法注入或者构造方法注入给b对象的引用。
控制反转 (IOC)(或者叫做依赖注入(DI ))
Spring 面向切面编程(AOP)
简单理解:功能对象不是自己实例化,通过注入实现(优点:解决硬编码问题)
什么是AOP
主要是管理系统层的业务,比如日志,权限,事物等。AOP是将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可重用的模块,这个模块被命名为切面(aspect),切面将那些与业务逻辑无关,却被业务模块共同调用的逻辑提取并封装起来,减少了系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。
面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
在不影响原来功能代码的基础上,使用动态代理加入自己需要的一些功能(比如权限的验证,事务的控制,日志的记录等等),移除之后,并不影响原来的功能
面向切面编程是通过动态代理实现的,是对面向对象思想的补充。
可以提供声明式的事务管理。**
spring支持用户自定义的切面。**
aop的advice有哪些
1)before:在执行切入的方法之前,执行代码
2)after returning:在执行切入的方法正常执行(没有异常)之后,执行代码
3)after throwing:在执行切入的方法发生异常的时候,执行代码
4)after:在执行切入的方法无论是否发生异常,都必须最后执行代码
aop框架具有的两个特征:
1.各个步骤之间的良好隔离性
2.源代码无关性
浅谈spring--AOP与IOC / DI相关推荐
- 浅谈 Spring IOC和AOP
浅谈 Spring IOC和AOP IOC 控制反转 以前创建对象的主动权和时机是由于自己把握的,现在将这种权利转移到Spring容器中,并且根据配置文件去创建对象管理对象 ioc的注入方式有三种:构 ...
- 浅谈Spring IOC和DI及Spring工厂类
浅谈Spring IOC和DI及Spring的工厂类 文章目录 浅谈Spring IOC和DI及Spring的工厂类 一. IOC 1.什么是IOC 2.为什么使用IOC 传统开发模式的弊端 3. 使 ...
- 浅谈Spring IOC的理解
浅谈Spring IOC的理解 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊 ...
- 浅谈 Spring IOC
浅谈 Spring IOC 什么是IOC 理解 IOC 和 DI Spring IOC 相关操作个人总结 什么是IOC Ioc-Inversion of Control,即"控制反转&quo ...
- 浅谈:Spring Boot原理分析,切换内置web服务器,SpringBoot监听项目(使用springboot-admin),将springboot的项目打成war包
浅谈:Spring Boot原理分析(更多细节解释在代码注释中) 通过@EnableAutoConfiguration注解加载Springboot内置的自动初始化类(加载什么类是配置在spring.f ...
- 由openSession、getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持
由openSession.getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持 Spring和Hibernate的集成的一个要点就是对事务的支持,op ...
- 浅谈Spring定时任务
浅谈Spring定时任务 三种定时任务基于原理 多定时任务并发配置 动态定时任务 定时任务Demo 三种定时任务基于原理 SpringBoot配置定时任务主要有Spring Schedule.JDK自 ...
- 浅谈Spring框架AOP概念
何为AOP? AOP(Aspect Oriented Programming,面向切面编程):AOP是一种新的方法论,在这之前相信我们都听过面向对象编程(OOP),AOP就是对OOP的补充,它们的关系 ...
- 浅谈Spring的Bean生命周期和作用域
学习spring有一段时间了.有的人说Spring的发展就是Java的发展,Spring就是Java的半壁江山,而且AOP思想更是OOP思想的一种扩展和延申.所以今天来浅谈一下spring的生命周期和 ...
- 认识Spring核心容器IoC/DI
对于 Java 编程来说,使用 Spring 能完成的更加快速,更容易并更安全.Spring 专注于速度,便捷与开发效率,也正是如此,让Spring成为了全世界最流行的 Java 框架.从配置到安全, ...
最新文章
- 创新创新再创新(4)
- LeetCode Permutations II(有重复元素的全排列)
- [转] Apache日志分析常用Shell命令
- Scala函数式对象-有理数
- YOLOv3实现鱼类目标检测
- php 取某个时间的时间戳,PHP 获取指定年月日的开始和结束时间戳
- 最值钱无人车团队组织架构曝光:Waymo总共不到千人,2/3是工程师
- bzoj 1628 1683: [Usaco2007 Demo]City skyline(模拟)
- glib wpa_supplicant Unix上库编译错误解决与总结
- 桩身弹性压缩计算公式_压缩弹簧弹力的计算公式
- 1 PPT默认初始设置(主题颜色、撤回次数、自动保存、图片压缩、字体嵌入、多格式导出、参考线、默认字体、默认样式和清除占位符)
- mac移除下载镜像的quarantine
- 驱动开发:Win10枚举完整SSDT地址表
- ThrustMaster HOTAS WARTHOG飞行摇杆评测
- 菁英杯计算机科目,菁英杯自主招生认可吗
- 除雾霾去朦胧增强色彩对比清晰画面调色插件 ClearPlus v2.1 Win/Mac AE/PR插件中文汉化版安装与使用
- [Win10+Excel365]尽管已启用VBA宏,Excel还是无法运行宏
- 10个最受欢迎的JavaScript图表库
- 彷徨 | HBase的详细介绍(概念以及特性)
- 从零开始学Python爬虫系列:Matplotlib FuncAnimation这1个功能,加1个更新函数,画出最简单的动图,让你爬取的数据动起来。(附:图片上加弹幕功能)
热门文章
- 信息学奥赛C++语言:满足条件的数累加
- java cookie secure_Cookie的Secure属性
- 协同过滤算法_基于Mahout的协同过滤推荐算法
- python字符串描述_Python字符串
- linux那些事之page cache
- HTML5新特性基础学习笔记上
- sed 第n行后加入_【高新课堂】第一百三十九期Liunx运维17个实用技巧
- 前端捕捉轨迹_基于JavaScript实现每日签到打卡轨迹功能
- 导航栏-滚动渐变 - 封装版
- WordPress简约响应式自媒体资讯博客主题Qui-Pure v5.25