大家好,我是IT修真院上海分院第3期的学员,一枚正直纯洁善良的JAVA程序员
今天给大家分享一下,修真院官网JAVA任务二,深度思考中的知识点——JAVA SPRING AOP基础使用及拓展
1.背景介绍
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者自己选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。
Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
2.知识剖析
而Spring核心功能主要是2个方面
①Spring IOC
IoC(Inversion of Control)控制反转,对象创建责任的反转,在spring中BeanFacotory是IoC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。XmlBeanFacotory实现BeanFactory接口,通过获取xml配置文件数据,组成应用对象及对象间的依赖关系。
②Spring AOP
AOP是Aspect Oriented Programming的缩写,意思是面向切面编程,提供从另一个角度来考虑程序结构以完善面向对象编程(相对于OOP),即可以通过在编译期间、装载期间或运行期间实现在不修改源代码的情况下给程序动态添加功能的一种技术。通俗点说就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中;比如安全,日记记录,这些都是通用的功能,我们可以把它们提取出来,然后在程序执行的合适地方织入这些代码并执行它们,从而完成需要的功能并复用了这些功能。
3.常见问题
4.解决方案
5.编码实战
顺便这里把各注释的解释贴一下!
@Aspect指定一个类为切面类
@Pointcut("execution(* test.*.*(..))")指定切入点表达式
@Before("@Pointcut定义下的方法名()")前置通知:目标方法之前执行
@After("@Pointcut定义下的方法名()") 后置通知:目标方法之后执行(始终执行)
@AfterReturning("@Pointcut定义下的方法名()")返回后通知:执行方法结束前执行(异常不执行)
@AfterThrowing("@Pointcut定义下的方法名()")异常通知:出现异常时候执行
@Around("@Pointcut定义下的方法名()")环绕通知:环绕目标方法执行
6.扩展思考
代理模式
代理(Proxy)是一种设计模式, 提供了对目标对象另外的访问方式;即通过代理访问目标对象。 这样好处: 可以在目标对象实现的基础上,增强额外的功能操作。(扩展目标对象的功能)。
动态代理/JDK代理
代理对象的生成,是利用JDKAPI,动态的在内存中构建代理对象,需要我们指定创建 代理对象/目标对象 实现的接口的类型
CGLIB代理
Cglib代理,也叫做子类代理。在内存中构建一个子类对象从而实现对目标对象功能的扩展。
在Spring的AOP编程中,如果加入容器的目标对象有实现接口,用JDK代理;如果目标对象没有实现接口,用Cglib代理.
问题思考:
动态代理注意点:代理对象不需要实现接口,但是目标对象一定要实现接口;否则不能用动态代理!CGLIB代理注意点:代理的类不能为final, 否则报错。目标对象的方法如果为final/static, 那么就不会被拦截,即不会执行目标对象额外的业务方法。
如何使用AOP代理静态方法?
7.参考文献
http://www.cnblogs.com/zhaozihan/p/5953063.html
8.更多讨论
视频链接:
v.qq.com/x/page/j05665mtvo9.html
PPT链接:
ptteng.github.io/PPT/PPT-java/Java_task2_SPRINGAOP.html#/
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~
我的邀请码:13299900,或者你可以直接点击此链接:http://www.jnshu.com/login/1/13299900