开发不用aop。程序猿的人生该会浪费多少时间。我想是时候让程序猿打败alpha狗了。程序猿解救世界。

1.概念

面向切面编程。这意味着,一切不在流水线上的东西。包含权限、日志、缓存、校验、资源、事物..都能够附加,并且不须要改动源码。假如你的业务是一条线,我们不在业务线上写一行代码就能完毕附加任务。我们会把代码写在其它的地方。通过2种技术手段来切入你的业务代码!是的,眼下仅有2种而已!

2.实现方式

基于动态代理实现 :表现形式为Spring AOP。在程序执行的时候。Spring 会为目标类动态的生成一个代理类来解决问题,由于他控制了程序执行的的入口和出口,决定怎样去实例化一个组件,所以假设你想要为公司开发一套框架,便于统一的资源訪问,监控等等等。仅仅要控制住入口和出口就可以,细节慢慢附加。是的,开发框架就这么简单!

结果截图:

实现截图:

//Spring Aop 代码实现:
public class UserServiceProxy implements IUserService {
public UserService userService;
public UserServiceProxy(UserService userService){
this.userService = userService;
}
@Override
public String getName(){
return "beautiful " + userService.getName();
}
}; IUserService userService = new UserServiceProxy(new UserService()); // 当然了,在真正的代码中UserServiceProxy 还继承了 java.lang.reflect.Proxy 类,这就决定了使用JDK的动态代理仅仅能代理接口而不能代理类。由于 extends 仅仅能使用一次!这时候就该cglib上场了。

基于静态织入实现:表现形式为Aspectj。

即,在代码执行的时候,我们须要增强的代码已经插入了目标类源码中。

关键点在于什么时候?

我们知道Spring 控制了组件的生命周期。所以在代码执行的时候创建了一个代理。那么aspectj呢,由于在代码执行的时候,增强代码已经进入目标类!所以,aspectj必须在其它阶段有所行动!一个 .java 文件由编译器编译为class、通过classloader载入到内存中、然后交给容器(比如:Spring)执行。aspectj提供了一个编译器插件解决问题!

假设让你来呢?骚年,make a different!你能够使用自己的类载入器来实现!请原谅我使用 .aj 而不是annotation来装逼!

(aspectj支持的两种语法)

结果截图:

实现截图:

能够看到UserService的源码经过aspectj的编译器编译后事实上已经改变了。

aspectj 的功能很强大,能够为一个类添加实现接口。加入属性,从而改变类的机构。可是在Web项目中,我们基本都是用Spring Aop来开发。aspectj不但须要一个特殊的编译器来编译代码,并且功能过于强大,我们却并不须要!

而Spring 提供给我们的。学习一个表达式就足够了。他仅仅是实现了aspectj的部分功能而已!

毫无疑问。aspectj在Android端正大放异彩!

鉴于大部分移动端小伙伴并未接触过Aop开发。

3.渣渣总结

我们的目标是:没有蛀牙。(剥离业务)

实现的方式是:动态代理(执行时)、静态织入(编译时、载入时)。

so,听说Android前一段时间流传着热修复这个概念,既然client已经发出去了,编译阶段已经不可能。你猜他们是用一个框架搞动态代理还是写了一个类载入器呢?

so,听说他们要为每一个方法做BeanValidator验证!

so,听说他们想要为全部接口做一个统一的信息出口!

so,听说他们要为每一个getXX方法提供30分钟数据缓存!

so,听说他们要在业务代码中加入日志统计功能!

so。听说他们要在client做埋点!

我还听说。你没绝杀AOP。

留言告诉我,秒杀!

战五渣系列之八(绝杀AOP)的更多相关文章

  1. Red Gate系列之八 SQL Connect 1.1.1.19 Edition 数据库连接及操作工具 完全破解+使用教程

    原文:Red Gate系列之八 SQL Connect 1.1.1.19 Edition 数据库连接及操作工具 完全破解+使用教程 Red Gate系列之八 SQL Connect 1.1.1.19 ...

  2. 单元测试系列之八:Sonar 数据库表关系整理一(续)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 简介:Sonar平台是目前较为流行的静态代码扫描平台,为了便于使用以及自己二次开发,有必要对它的数据库结构进行学习 ...

  3. nginx高性能WEB服务器系列之八--nginx日志分析与切割

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  4. mongo 3.4分片集群系列之八:分片管理

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  5. WPF编游戏系列 之八 银行界面及金额校验

    原文:WPF编游戏系列 之八 银行界面及金额校验        在前面<WPF编游戏系列 之四 用户控件>一文中通过用户控件创建了"My Shop"中物品列表框.本篇继 ...

  6. OpenvSwitch系列之八 vxlan隧道

    Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...

  7. 老生常谈系列之Aop--Spring Aop源码解析(二)

    老生常谈系列之Aop--Spring Aop源码解析(二) 前言 上一篇文章老生常谈系列之Aop--Spring Aop源码解析(一)已经介绍完Spring Aop获取advice切面增强方法的逻辑, ...

  8. 老生常谈系列之Aop--Spring Aop源码解析(一)

    老生常谈系列之Aop--Spring Aop源码解析(一) 前言 上一篇文章老生常谈系列之Aop--Spring Aop原理浅析大概阐述了动态代理的相关知识,并且最后的图给了一个Spring Aop实 ...

  9. 老生常谈系列之Aop--Spring Aop原理浅析

    老生常谈系列之Aop--Spring Aop原理浅析 概述 上一篇介绍了AspectJ的编译时织入(Complier Time Weaver),其实AspectJ也支持Load Time Weaver ...

随机推荐

  1. DBLINK引起的SQL性能问题

    最近发现报表系统上有一存储过程越来越慢,在数据库中查询后,发现有以下条SQL --优化前:耗时>1h select c.policyno, c.endorseno, r.item_code, s ...

  2. Python爬虫-抖音小视频-mitmproxy与Appium

    目的:  爬取抖音小视频 工具:  mitmproxy.Appium 思路: 1.  通过 mitmproxy 截取请求, 找出 response 为 video 的请求. 2.  通过 mitmdu ...

  3. ActiveMQ windows安装

    下载ActiveMQ 官方网站:http://activemq.apache.org/ 下载,解压缩 以前台安装 ctiveMQ默认使用的TCP连接端口是61616, 通过查看该端口的信息可以测试Ac ...

  4. [工具]Visual Studio

    1,Tab键的使用: 如不说有这样的代码:public Member member { get; set; } 当我们编辑完Member后,按一下Tab键,就能够将光标锁定到member上,等待键盘输 ...

  5. Android开发——获取微信聊天记录(后台秘密发邮件)

    1. 首先先展示一下效果图: 2. Accessibility机制 Accessibility机制之前已经介绍过了,具体可以查看Accessibility机制实现模拟点击,需要简单的配置(如设置被监听 ...

  6. 03002_Http请求协议分析

    1.编写一个form.html的表单页面 (1)使用EclipseEE新建一个动态的web项目: (2)Dynamic web module version选择2,5版本: (3)新建一个form.h ...

  7. 【尺取】HDU String

    http://acm.hdu.edu.cn/showproblem.php?pid=5672 [题意] 给定一个小写英语字母组成的字符串,求这个字符串一共包含多少个至少有m个不同字母的连续子序列 [思 ...

  8. iview自定义配置

    说明 iview是一套基于 Vue.js 的高质量 UI 组件库.主要用户PC端页面设计. 官网:https://www.iviewui.com/ 1.在vue-cli项目中,添加该框架 第一步,安装 ...

  9. hihoCoder #1055 : 刷油漆 [ 树形dp ]

    传送门 结果:Accepted     提交时间:2015-05-11 10:36:08 #1055 : 刷油漆 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到 ...

  10. msp430项目编程05

    msp430中项目---TFT彩屏显示(续) 1.TFT彩屏工作原理 2.电路原理说明 3.代码(静态显示) 4.代码(动态显示) 5.项目总结 msp430项目编程 msp430入门学习