腾讯云
开发者社区
文档
建议反馈
控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
字根中文校对软件
专栏作者
举报
188
文章
184231
阅读量
44
订阅数
订阅专栏
申请加入专栏
全部文章
http
java
编程算法
搜索引擎
api
windows server
数据库
sql
lucene/solr
html
.net
网站
开源
xml
ide
aop
其他
c#
eclipse
spring
容器
爬虫
windows
servlet
云数据库 SQL Server
oracle
git
github
linux
网络安全
https
c++
python
json
ubuntu
容器镜像服务
人工智能
企业
php
go
actionscript
apache
神经网络
腾讯云测试服务
存储
缓存
hive
测试
区块链
NLP 服务
机器学习
javascript
ruby
ajax
打包
tomcat
中文分词
analyzer
centos
深度学习
mapreduce
it
接口
科技
系统
perl
bash
scala
asp.net
symfony
postgresql
access
jar
struts
unix
bash 指令
delphi
文件存储
TDSQL MySQL 版
检测工具
mongodb
svg
运维
jdk
hadoop
jvm
ssh
正则表达式
erp
gui
yum
面向对象编程
jdbc
推荐系统
tcp/ip
udp
socket编程
kvm
uml
大数据
机器人
数据结构
hbase
虚拟化
sdk
backup
com
crontab
enterprise
firefox
im
office
prefix
production
sh
status
tree
vmware
web
yahoo
备份
编辑器
部署
服务器
工具
脚本
连接
乱码
权限
数组
字符串
搜索文章
搜索
搜索
关闭
CgLib ,NCgLib 和AOP (之一)
aop
java
.net
spring
面向对象编程
广大关心编程前沿的程序员已经对AOP的感念耳熟能详了。无论是基于.NET的实现还是基于Java的实现都有很多开源的项目可供参考。 对AOP不了解的读者可以到我得AOP专栏,熟悉一下AOP的基本概念。 回顾AOP的历史可以看出,AOP并不是最近几年才冒出的“新”概念,据说历史可以追溯到施乐公司的一个实验室的项目。 从汇编语言,面向过程的编程,在到现在被广泛接受的OOP的编程思想,人们逐步抽象出对现实世界的描述。这每一步的进步,都使得我们对大规模的软件编程更容易控制和实现。 那么为什么到了现在AOP才受到业界广泛关注呢? 一方面OOP的编程思想相对成熟,也逐步显露出了其不能有效解决的领域,这部分需要新的思想来填充。另一方面就是程序语言的进步。 大家知道AOP的特点之一是Interception,就是拦截。比如在方法执行前,执行中,执行后动态插入一些额外的方法,典型的就是日志,权限和事务控制。 在基于虚拟机java 和 CLR 的.net 出现以前实现方法拦截,几乎不可能。 单单从Interception上说,珊瑚虫 和 木子版本的 QQ 就是一个 具有AOP特性的实现。大家有兴趣可以了解一下 珊瑚虫 或者 木子 版本的QQ的实现方式,可以说是呕心沥血,经历了无数次的重新启动和汇编测试,才实现了对QQ相关方法的拦截。 因为无论是java的字节代码,还是.net的伪编译,他们生成的都不是最终的机器代码,而是平台无关的代码,这些代码在具体执行的时候还需要翻译成机器代码才可以执行。中间语言的出现使我们对执行前的代码有了更多的控制。 正因为如此AOP的理论有了实现的可能,这个时候出现可谓水到渠成。 一般来讲AOP的实现有3种途径: 1 在编译成中间代码前就让代码具有AOP的特性,比如AspectWikez; 2 使用语言特性,从设计方法出发,实现AOP,比如基于Java 的动态代理实现AOP。(见我得南宁系列文章); 3 在中间代码运行时,动态修改中间代码,使其具有AOP特性。 上面3种方法的有缺点我认为有几下几点: 采用的一种方法,一般需要编译器的扩充支持,如同C编译器的出现代替汇编一样,需要长时间的验证其稳定性和效率。另外对于最终开发人员来说也需要学习这些编译器,或者新的语法指令完成这些功能,当然功能也最强大。 第2种方法,我认为是一种轻量级别的实现,比如Nanning 和 DynAOP 等,一般这样的实现需要在设计上下功夫。比如需要基于接口编程。对于已有的项目来说,改动量非常大。 第3种方法,介于1,2种方法之间。采用第3种方法实现AOP,不需要每个类都有一个接口,也没有什么编译器的更改。他的缺点是需要高超的编程技巧。正因为如此,才有很多项目用第3种方法包装后,给最终开发人员使用比如:Spring。 实际上Spring 的AOP实现种第1,2种方法都采用了。 我认为目前的项目种,大规模的采用AOP还不适合,一方面AOP还在发展之中,另一方面支持AOP的框架还没有被广泛的接受。 正因为如此我们不妨直接操作中间代码,在项目的一些关键地方实现一些AOP的特性。 那在Java的世界中可以用cglib,Javassist 等 在.net的世界中可以用ncglib。 下文我们来给出一些代码例子。 (待续)
田春峰-JCJC错别字检测
2019-02-14
402
0
没有更多了
社区活动
Python精品学习库
代码在线跑,知识轻松学
点击查看
【玩转EdgeOne】征文进行中
限时免费体验,发文即有奖~
立即参加
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
立即体验
技术创作特训营·精选知识专栏
往期视频·干货材料·成员作品·最新动态
立即查看
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档