80 likes | 259 Views
Spring 在微博开发中的应用. 道玉. Spring 的核心. 依赖注入 DI 面向切面编程 AOP 着重讲述 AOP 在微博开发中的应用 Application context / server Template 对数据库,异常的封装. AOP. Aop 是为了解决什么问题 交叉模块问题 Don’t repeat yourself 避免成为 copy- paster 式的 编程风格 有哪些是交叉模块问题 权限验证 日志记录 数据分页 搜索数据(不同的搜索条件). AOP 的基本概念. Join point 程序运行时的一个切入点
E N D
Spring的核心 • 依赖注入 DI • 面向切面编程 AOP • 着重讲述AOP在微博开发中的应用 • Application context / server • Template • 对数据库,异常的封装
AOP • Aop是为了解决什么问题 • 交叉模块问题 • Don’t repeat yourself • 避免成为copy-paster式的编程风格 • 有哪些是交叉模块问题 • 权限验证 • 日志记录 • 数据分页 • 搜索数据(不同的搜索条件)
AOP的基本概念 • Join point • 程序运行时的一个切入点 • Point cut • 选择,控制切入点,和收集程序运行到切入点时的上下文环境 • Advice • 在切入点和相应的上下文环境中,需要执行的代码。 • Aspect • Aspect 就是 面向对象编程的类。用来盛放以上的概念。
Spring和python • Python本身是动态语言,为什么需要DI? • 在python下, def func(user): … user可以传任何类型,数组,词典,或者是个对象,这本身就是DI的概念,而且比DI更自由。 • Python本身有meta class编程,为什么需要AOP?(spring的修饰符) • Meta class编程复杂度高 • Spring提供了很多高级特性,使用起来也很简单。
Aop应用在python的好处 • Metaclass • Oop中,class是用来制造object的模板 • Metaclass是用来制造class的模板(只适用于解决部分交叉模块问题) • 应用aop,不需要学习metaclass复杂的概念 • 不需要源代码 • Metaclass编程需要改动源代码,并把decorator是插入回去。 • 应用aop,源代码可以随意变动,并忽略aop的存在。Aop和原功能代码可以互相变动,而不相互影响。 • 不需要monkey patching • 在runtime来动态的给一个object增加,删除,修改它的方法 • 这样虽然带来便利,但是会引入非常多不可预料的BUG • 污染了object
Spring aop的risk • 有些功能被移出了核心代码(例如日志,权限验证等),而是放到了aop代码中,这些功能什么时候生效是不透明的,需要使用配置文件。