小课堂

SPRING AOP

分享人:成延

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者自己选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

2.知识剖析

Spring核心功能

Spring IOC

IoC(Inversion of Control)控制反转,对象创建责任的反转,在spring中BeanFacotory是IoC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。 XmlBeanFacotory实现BeanFactory接口,通过获取xml配置文件数据,组成应用对象及对象间的依赖关系。

Spring核心功能

Spring AOP

AOP是Aspect Oriented Programming的缩写,意思是面向切面编程,提供从另一个角度来考虑程序结构以完善面向对象编程(相对于OOP),即可以通过在编译期间、装载期间或运行期间实现在不修改源代码的情况下给程序动态添加功能的一种技术。通俗点说就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中;比如安全,日记记录,这些都是通用的功能,我们可以把它们提取出来,然后在程序执行的合适地方织入这些代码并执行它们,从而完成需要的功能并复用了这些功能。

5.编码实战

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.更多讨论

欢迎大家交流和讨论

鸣谢

感谢大家观看

BY : 成延