阿里P7架构师黄老师,亲授spring100集,倾情为大家呈现
黄师傅
曾任职于阿里巴巴、北京拓尔思、北京人人网、北京掌阅科技等多家企业,在阿里解决JVM调优,JVM排错,开源框架NickleScheduler和NickleFeign使用,在Netty上提过PR,曾获得宜信、去哪儿、饿了么、京东、搜狐等大厂Offer,专攻底层原理技术。
精通C、Java、Hotspot JVM、Linux内核、微服务、架构设计、各大开源框架源码,对领域驱动模型有独特见解。
概述
AOP从功能的角度来讲,可能看作OOP编程方式的一种补充,提供了一种不同的代码或者系统组织方式。OOP中的核心概念是Class,而在AOP中则是Aspect。
spirng-aop模块是Spring框架中的核心模块,虽然Spring Ioc container并不依赖AOP,但AOP给Ioc的实现提供了一种强大而灵活的解决方案。
在Spring Framework中,AOP主要是用于两种目的:
Spring AOP由纯Java实现,无须特殊的编译处理,也不需要控制类加载器的层次结构,所以它可以适用于Servlet Container和其它application server.
Spring AOP目前只支持方法级别的切换或拦截,属性的拦截现在不支持,如果想要拦截属性,可以考虑使用AspectJ语言。
Spring AOP的使用不同于其它大多数AOP框架。它的主要目的不是提供一套大而全的AOP实现,而是集成AOP不同实现协同Spring Ioc来帮助解决一些普遍性问题。
需要注意的是,一些细粒度的advised(如domain model),Spring AOP往往不能提供很好的支持,这场景也还是考虑AspectJ。即使如此,就普遍经验来说Spring AOP的强大机制依然能够解决大多数场景的问题。
所以在使用Spring AOP时,不会强制我们在业务代码中引入特定类或者接口,可以最大限度的保持代码 clean and decouple。然而Spring也提供了另一种选择,如果有特定的场景需要的话,你可以在你的代码中直接引入Spring AOP。几乎所有Spring框架中的模块,在使用的方式上都会给你多种选择,以便让用户选择更适合自己场景的方式。使用AspectJ还是Spring AOP,使用annotation方式还是xml的配置方式,Depends On U。
了解了Spring AOP的初衷和使用场景,来看下它的大致实现原理
这里所说的层,当然是广义上的,可以是一层抽象,也可以是一层cache,大致含义是隔离和解耦的范畴。
在Spring的世界里,每一个模块的引入,或者第三方技术的集成,总会提供一个抽象层 ,对用户提供统一的API,屏蔽了所有的实现细节以及不同实现的差异。例如,,以及等模块都提供了一层抽象。
Spring AOP的实现是基于代理的机制,默认是采用Jdk dynamic proxy,也可以采用cglib的proxy。两者的区别主要是在于被代理的对象的不同。当目标对象是接口时,Jdk dynamic proxy可以完成代理,但目标对象是没有实现接口的类时(尽量少一些,面向接口编程是好习惯),是需要采用cglib proxy来完成代理的,当然你也可以强制接口也采用cglib来代理;另外需要注入或引用具体类型时,如果引用的东西恰恰是代理过的对象,此时也需要采用cglib的方式。
关于spring源码解析,黄老师讲了100集的spring源码解析视频,趁国庆节前夕为大家亲情呈现。
获取方式:
1.转发关注小编;
2.2.加小编V X 17835068576就可以拿到啦~~