Ioc和Aop底层原理
Spring中主要用到的设计模式有工厂模式和代理模式。
IOC:Inversion of Control控制反转,也叫依赖注入,通过 sessionfactory 去注入实例;IOC就是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是通过容器生成,同时,要是产生的是单例的bean,他还可以给管理bean的生命周期;通过注解配置或者进行xml配置实现,如@Controller,@Service,@Repository等注解配置
AOP:面向切面编程,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统,从而避免了在业务逻辑的代码中混入很多的系统相关的逻辑,比如安全,日志,事务功能;也可以通过注解配置或者进行xml配置实现,如@Aspect ,@Before,@After等或<aop config/>注解配置;主要是JDK动态代理和cglib动态代理
Spring的AOP和IOC都是为了解决系统代码耦合度过高的问题,使代码重用度高,易于维护。

一、Ioc :通过Spring配置来创建对象,而不是new的方式
两种方法:配置文件,注解
1.Ioc底层原理
(1)xml配置文件
(2)dom4j解析
(3)工厂设计模式
(4)反射
步骤:
第一步:创建类的.xml文件
<bean id="userService" class="....."/>
第二步:创建一个工厂类:使用dom4j解析配置文件+反射
public class UserFactory{
public static UserService getUserService(){
//使用dom4j解析配置文件
//根据id值userService,得到id值对应class的属性值
String classValue="userService";
//使用反射来创建class对象
Class class=Class.forName(classValue);
UserService service=class.newInstatnce();
return service;
}
}

通过IOC,我们如果改掉UserService类,只需更改bean里面的配置属性就行了,降低了类之间的耦合度
2.Ioc和DI的区别:
(1)Ioc:控制反转,把创建对象交给Spring进行配置
(2)DI:依赖注入,向类里面的属性中设置值
(3)二者关系:DI不能单独存在,要在Ioc基础之上来完成操作,即要先创建对象才能注入属性值。
3.Spring整合web项目原理
(1)加载Spring核心配置文件
ApplicationContext context=new ClassPathXmlApplicationContext(“bean1.xml”);
加载文件要new一个对象,每次访问都要new对象加载配置,效率低
(2)实现思想:吧加载配置文件和创建对象过程,在服务器启动时候完成
(3)实现原理:
a) ServletContext对象
b) 监听器(ServletContextListener接口)
c) 具体使用:
i. 服务器启动时,为每个项目创建一个ServletContext对象
ii. 使用监听器可以监听到ServletContext在何时创建
iii. 在监听器的,ServletContextListener接口的contextInitialized()方法方法中加载Spring配置文件(括号1中代码),创建对象。
iv. 把创建出来的对象放到ServletContext域对象里面(setAttribute方法)
v. 获取对象时,从ServletContext域对象中得到(getAttribute方法)
二、Aop:面向切面,扩展功能时不通过源代码,横向抽取机制。
底层使用动态代理方式---增强方法
具体分两种情况:
(1)有接口的情况:创建接口的实现类的代理对象,jdk动态代理(由java的反射机制实现,对实现了接口的类产生代理,需要实现 InvocationHandler 接口,并实现 invoke() 方法)

(2)没有接口的情况:创建User类的子类的代理对象,cglib动态代理(借助 asm 来实现的,对没有实现接口的类产生代理,生产子类对象,需要实现 MethodInterceptor 接口,实现 intercepter 方法)。子类可以通过super调用父类方法

增强:before,after,(前置,后置,异常,最终,环绕增强)
Ioc和Aop底层原理的更多相关文章
- springAop:Aop(Xml)配置,Aop注解配置,spring_Aop综合案例,Aop底层原理分析
知识点梳理 课堂讲义 0)回顾Spring体系结构 Spring的两个核心:IoC和AOP 1)AOP简介 1.1)OOP开发思路 OOP规定程序开发以类为模型,一切围绕对象进行,OOP中完成某个任务 ...
- Spring Aop底层原理详解
Spring Aop底层原理详解(来源于csdn:https://blog.csdn.net/baomw)
- spring AOP底层原理实现——jdk动态代理
spring AOP底层原理实现——jdk动态代理
- Spring AOP底层原理
------------------siwuxie095 Spring AOP 底层原理 AOP 即 Aspect Or ...
- IoC容器(底层原理)
IoC(概念和原理) 1,什么是IoC (1)控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 (2)使用IoC目的:为了降低耦合度 (3)做入门案例就是IoC实现 2,IoC底层原 ...
- 第二章 IOC + AOP 底层原理
<精通Spring4.x 企业应用开发实战>读书笔记 一.概念 IOC: 假设B类调用了A类,那么A类的对象的创建是由B类来实现: IOC是指将A对象的创建由容器来完成,并且将创建好的对象 ...
- JAVA框架 Spring AOP底层原理
一:AOP(Aspect Oriented Programming)面向切面编程. 底层实现原理是java的动态代理:1.jdk的动态代理.2.spring的cglib代理. jdk的动态代理需要被代 ...
- 重新学习Spring之核心IOC容器的底层原理
一:IOC容器的定义 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 控制反转一般 ...
- 漫画 | Spring AOP的底层原理是什么?
1.Spring中配置的bean是在什么时候实例化的? 2.描述一下Spring中的IOC.AOP和DI IOC和AOP是Spring的两大核心思想 3.谈谈IOC.AOP和DI在项目开发中的应用场景 ...
随机推荐
- vue-cli3.0 初体验
vue-cli3.0 自我记录 其实在2018年8月10号,vue-cli3.0就已经面世了,由于项目中应用的全是2.x版本,所以并不了解3.0的vue-cli发生了什么变化,那今天尝试了下遇见的问题 ...
- 【麦兜搞it】Python入门
一.基本数据类型 整型.浮点型.布尔型内容略 1.字符串的格式化 name='python' age=27 # 打印“我是python,今年27岁了” new_str='我是'+name+',今年'+ ...
- RoP
RoPS特征提取 RoPS为Rotational Projection Statistics的简写,即旋转投影统计特征.RoPS特征具有对点云旋转和平移(即姿态变化)的不变性,具备很强的鉴别力以及对噪 ...
- C++ STL——string和vector
目录 一 STL基本概念 二 string容器 三 vector容器 3.1 vector动态增长原理 3.2 vector构造函数 3.3 vector常用赋值操作 3.4 vector大小操作 3 ...
- 微信小程序跳转问题:wx.redirectTo、wx.navigateTo、wx.reLaunch、wx.switchTap、wx.navigateBack区别
wx.redirectTo:关闭当前页,跳转到指定页: wx.navigateTo:保留当前页,跳转到指定页: wx.reLaunch:关闭所有页面,打开到应用内的某个页面. wx.switchTap ...
- curl获取远程页面
// 创建一个新cURL资源$ch = curl_init(); // 设置URL和相应的选项$options = array(CURLOPT_URL => 'http://www.w3csch ...
- R语言与概率统计(五) 聚类分析
#########################################0808聚类分析 X<-data.frame( x1=c(2959.19, 2459.77, 1495.63, ...
- C2B电商三种主要模式的分析_数据分析师
C2B电商三种主要模式的分析_数据分析师 在过去的一年中电商领域血雨腥风,尤其是天猫.京东.苏宁.当当.易讯等B2C电商打得不亦乐乎.而随着B2C领域竞争进入白热化阶段,C2B模式也在天猫" ...
- elk收集tomcat的日志
logstash收集tomcat的日志 不要修改下tomcat中server.xml的日志格式,否则tomcat无法启动,试过多次,不行,就用自带的日志让logstash去收集 首先给tomcat日志 ...
- zabbix3.0升级到4.0
升级步鄹: 3.0->3.2 1.停服务 service zabbix-server stop 2.备份配置文件 #cp /etc/zabbix/zabbix_server.conf /data ...