Spring AOP原理(续)
十二、AOP
1. 说出Spring的通知类型有哪些?
spring共提供了五种类型的通知:
| 通知类型 | 接口 | 描述 |
| Around 环绕通知 | org.aopalliance.intercept.MethodInterceptor | 拦截对目标方法调用 |
| Before 前置通知 | org.springframework.aop.MethodBeforeAdvice | 在目标方法调用前调用 |
| After 后置通知 | org.springframework.aop.AfterReturningAdvice | 在目标方法调用后调用 |
| Throws 异常通知 | org.springframework.aop.ThrowsAdvice | 当目标方法抛出异常时调用 |
前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。
正常返回通知[After returning advice]:在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。
异常返回通知[After throwing advice]:在连接点抛出异常后执行。
返回通知[After (finally) advice]:在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。
环绕通知[Around advice]:环绕通知围绕在连接点前后,比如一个方法调用的前后。这是最强大的通知类型,能在方法调用前后自定义一些操作。




<bean id="myMethodBeforeAdvice" class="com.cdtax.aop.MyMethodBeforeAdvice"></bean>
<!-- 配置后置通知 -->
<bean id="myAfterReturningAdvice" class="com.cdtax.aop.MyAfterReturningAdvice"></bean>
<!-- 配置代理对象 -->
<bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 代理接口集 -->
<property name="proxyInterfaces">
<list>
<value>com.cdtax.aop.TestServiceInter</value>
<value>com.cdtax.aop.TestServiceInter2</value>
</list>
</property> <!-- 把通知织入到代理对象 | 拦截器名集-->
<property name="interceptorNames">
<list>
<!-- 相当于把 MyMethodBeforeAdvice前置通知和代理对象关联起来,我们也可以把通知看成拦截器,struts2核心就是拦截器 -->
<value>myMethodBeforeAdvice</value> <!-- 织入后置通知 -->
<value>myAfterReturningAdvice</value> </list>
</property> <!-- 配置被代理对象,可以指定 -->
<property name="target" ref="test1Service"> </property>
</bean>
</beans>
2. 谈谈目标对象实现接口与目标对象不实现接口有什么区别?
(1)如果目标对象实现了接口,默认采用JDK的动态代理机制实现AOP
(2)如果目标对象实现了接口,可以强制spring采用CGLIB实现代理
(3) 如果目标对象没有实现接口,必须采用CGLIB实现代理,spring会自动的在CGLIB和JDK动态代理之间切换
3. 请描述JDK动态代理和CGLI代理的区别?
jdk动态代理是目标类实现了接口,而不能针对类;
CGLI动态代理是目标类没有实现接口。主要是对指定的类生成一个子类,覆盖其中的方法。
4. 简述ProxyFactoryBean的作用是什么?
ProxyFactoryBean的作用是依照配置信息,将切面应用到目标对象,生成动态代理对象
5. 叙述Spring中的自动代理的原理?
Spring在生成代理对象的时候,默认情况下,会使用被代理对象的接口来生成代理对象。如果被代理对象没有实现接口,此时,Spring会使用CGLIB生成代理对象,此时该代理对象是被代理对象的子类。
5. 写出创建代理对象需指定的三要素是什么?
(1)设定目标对象 【target】 (2)设定代理接口 【interface】 (3)设定拦截器的名字【使用哪种通知】
6. 请简述:什么是AOP?简述AOP核心?
将程序中的交叉业务逻辑提取出来,称之为切面。将这些切面动态织入到目标对象,然后生成一个代理对象的过程。
AOP核心主要包括以下内容:(1)Aspect(切面),(2)Joinpoint(连接点),(3)Advice(通知),(4)Pointcut(切入点),(5)Introduction(引入),(6)Weaving(织入),(7)Target(目标对象),(8)Proxy(代理对象)
7. 请叙述AOP事务的含义?
Spring中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通过动态代理实现的,由于接口是延迟实例化的,spring在这段时间内通过拦截器,加载事务切片。
8. 请简述Spring的工作机制?为什么用Spring的工作机制?
工作机制是IOC ,IOC是思想 、依赖注入是实现,还有AOP的思想
1.使用IOC最大程度的对对象的依赖关系解耦
2.使用AOP解除了模块或组件之间的耦合
3.简化其他框架的代码
4.是框架之间的润滑剂和粘合剂
5.spring 是无侵入的设计。在代码中感觉不到它的存在
6.spring是无依赖式的设计。spring不依赖任何框架,而且本身也无依赖
3. 请简述Spring是什么?
Spring是一个轻型的容器,是J2EE规范的轻量级实现,是企业应用的“一站式”解决方案。其中的核心就是bean工厂,用以构造我们需要的Model,spring是非侵入式的,Spring的应用中的对象不依赖于Spring的特定类。
4. 简述spring的组成?
Spring主要由以下六个部分组成:
① Spring Core:核心容器,BeanFactory提供了组件生命周期的管理,组件的创建,装配,销毁等功能。
② SpringContext:ApplicationContext,扩展核心容器,提供事件处理、国际化等功能。它提供了一些企业级服务的功能,提供了JNDI,EJB,RMI的支持。
② Spring AOP:提供切面支持。
③ Spring DAO:提供事务支持,JDBC,DAO支持。
④ Spring ORM:对流行的O/R Mapping封装或支持。
⑤Spring Web:提供Web应用上下文,对Web开发提供功能上的支持,如请求,表单,异常等。
⑥ Spring Web MVC:全功能MVC框架,作用等同于Struts。
5.简述Spring容器提供了哪些功能?
Spring容器提供了对对象的管理,如Spring容器负责生成、组装、销毁组件,,另外Spring容器还提供了对持久化的支持,对事务的支持。另外Spring容器提供了国际化等功能。
6. 请叙述设值注入的优点?
设置注入的优点:(1)与传统的JavaBean的写法更相似,程序开发人员更容易了解和接受。通过setter方法设定依赖关系显得更加直观、自然。(2)对于有复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,难以阅读。Spring在创建bean实例时,需要同时实例化其依赖的全部实例,因而导致性能的下降,而使用设值注入能够解决这些问题。(3)尤其是某些属性可选的情况下,多参数的构造器更加笨重。
7. 请叙述构造注入的优点?
参考答案:构造注入的优点:(1)可以在构造器中决定依赖关系的注入顺序,优先依赖的优先注入。(2)对于依赖关系无须变化的bean,构造注入更加有用处。因为没有setter方法,所有的依赖关系全部在构造器内设定,因此,无须担心后续的代码对依赖关系产生破坏。(3)依赖关系只能在构造器中设定,则只有组建的创建者才能改变组建的依赖关系。对组建的调用者而言,组建内部的依赖关系完全透明,更符合高内聚的原则。
8. 请简述你对IOC的理解?IoC最大的好处是什么?
IOC即Inversion of Control,就是反转控制,Ioc将控制创建的职责搬进了框架之中,并把它从应用代码中分隔开来,使用Ioc容器则需要指出组件需要什么对象在运行时容器会提供给它,容器是通过查看对象的参数表做到的,也可能根据配置数据如xml。
IoC最大的好处是降低了对象的耦合性,实现了应用的松散耦合。因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是现实于某种接口的),只要修改XML就可以了。
9. 简述IoC的注入类型?
IOC可以分为三种注入类型,分别是构造函数注入、属性注入和接口注入。Spring主要支持构造函数注入和属性注入。
10. Spring中依赖注入与传统编程之间的差别是什么?
参考答案:在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。依赖注入的主要作用是起到解耦合的作用。
Spring AOP原理(续)的更多相关文章
- 面试问烂的 Spring AOP 原理、SpringMVC 过程(求求你别问了)
Spring AOP ,SpringMVC ,这两个应该是国内面试必问题,网上有很多答案,其实背背就可以.但今天笔者带大家一起深入浅出源码,看看他的原理.以期让印象更加深刻,面试的时候游刃有余. Sp ...
- spring ioc 原理 spring aop原理
大家一直都说spring的IOC如何如何的强大,其实我倒觉得不是IOC如何的强大,说白了IOC其实也非常的简单.我们先从IOC说起,这个概念其实是从我们平常new一个对象的对立面来说的,我们平常使用对 ...
- spring aop原理分析
持续更新... aop跟java代理模式有关. java.lang.reflect.Proxy java.lang.reflect.InvocationHandler 工厂模式用到java反射. ao ...
- spring aop 原理学习
@EnableAspectJAutoProxy: @Import(AspectJAutoProxyRegistrar.class) 实际是创建了一个以org.springframework.aop.c ...
- Spring Boot -- Spring AOP原理及简单实现
一.AOP基本概念 什么是AOP,AOP英语全名就是Aspect oriented programming,字面意思就是面向切面编程.面向切面的编程是对面向对象编程的补充,面向对象的编程核心模块是类, ...
- spring aop原理和实现
一.aop是什么 1.AOP面向方面编程基于IoC,是对OOP的有益补充: 2.AOP利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了 多个类的公共行为封装到一个可 ...
- 【spring 注解驱动开发】Spring AOP原理
尚学堂spring 注解驱动开发学习笔记之 - AOP原理 AOP原理: 1.AOP原理-AOP功能实现 2.AOP原理-@EnableAspectJAutoProxy 3.AOP原理-Annotat ...
- Spring AOP 原理的理解
>AOP基本概念 1)通知(Advice):织入到目标类连接点上的一段程序代码.通知分为五种类型: - Before:在方法被调用之前调用 - After:在方法完成后调用通知,无论方法是否执行 ...
- Spring AOP原理及拦截器
原理 AOP(Aspect Oriented Programming),也就是面向方面编程的技术.AOP基于IoC基础,是对OOP的有益补充. AOP将应用系统分为两部分,核心业务逻辑(Core bu ...
随机推荐
- 用Ajax遍历三级下拉框
用Ajax遍历三级下拉框 //通过一级分类的id查二级分类(记得在前端网页按钮绑定点击事件) function getSecondCategory(oneCategoryId){ alert(&quo ...
- Jquery Ajax Realize whether the user is registered
XMLHttpRequest对象可以在不向服务器提交整个页面的情况下,实现局部更新网页.当页面全部加载完毕后,客户端通过该对象向服务器请求数据,服务器端接受数据并处理后,向客户端反馈数据. XMLHt ...
- MySql事务的隔离级别及作用
逻辑工作单元遵循一系列(ACID)规则则称为事务. 原子性:保证事务是一系列的运作,如果中间过程有一个不成功则全部回滚,全部成功则成功.保证了事务的原则性. 一致性:一致性指的是比如A向B转100块钱 ...
- 解决Python中PyCharm导入模块时,模块名下出现红色波浪线的问题
在博主第一次在PyCharm中导入模块时,模块名下出现红色波浪线,不影响程序执行,但强迫症忍不了 以下是解决办法 Let's do it ... 进入设置,找到Console下的Python Cons ...
- .NET Core + Abp踩坑和填坑记录(1)
1. Net Core 的DI和Abp的DI并存 Startup中 ConfigureServices返回值改为IServiceProvider 在ConfigureServices最后调用retur ...
- Java代码更改shape和selector文件的颜色值
Android里面经常会使用shape或者selector来定制一些View的背景.那么如果想要动态更改shape或者seletor文件中的颜色值,该怎么处理呢? 一.Java代码更改shape的颜色 ...
- 浅谈《think in java》:一 对象导论总结
清单1. 抽象机制,面向对象程序设计方式 java所基于Smalltalk的特性表现一种纯粹的面向对象设计方式: 万物都是对象 程序是对象的集合(容器),他们通过发送消息(发送请求)来告知彼此所要做的 ...
- Unity中控制天空盒移动的解决办法
为了使天空盒更真实,需要控制天空盒动态旋转. 网上找到的方法是: float num = RenderSettings.skybox.GetFloat("_Rotation"); ...
- Hadoop学习笔记(四):Yarn和MapReduce
1. 先关闭掉所有的防火墙(master和所有slave) 2. 配置yarn-site.xml文件(配置所有机器,此时没有启动hadoop服务) 3. 启Yarn,输入要命令start-yarn.s ...
- 【深度学习与TensorFlow 2.0】入门篇
注:因为毕业论文需要用到相关知识,借着 TF 2.0 发布的时机,重新捡起深度学习.在此,也推荐一下优达学城与 TensorFlow 合作发布的TF 2.0入门课程,下面的例子就来自该课程. 原文发布 ...