战五渣系列之八(绝杀AOP)

开发不用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。

留言告诉我,秒杀!

时间: 2024-10-07 11:52:13

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

Spring基础系列12 -- Spring AOP AspectJ

Spring基础系列12 -- Spring AOP AspectJ 转载:http://www.cnblogs.com/leiOOlei/p/3613352.html 本文讲述使用AspectJ框架实现Spring AOP. 再重复一下Spring AOP中的三个概念, Advice:向程序内部注入的代码. Pointcut:注入Advice的位置,切入点,一般为某方法. Advisor:Advice和Pointcut的结合单元,以便将Advice和Pointcut分开实现灵活配置. Aspe

(Mirage系列之八)Mirage经典案例之数据更新和恢复

在(Mirage系列之四)Mirage经典案例之集中桌面管理中我们介绍过,Mirage将客户端的数据根据策略备份到服务器上.备份数据的一个最重要的目的就是用户数据恢复,这次我们来讲如何从客户端恢复用户数据. 从客户端恢复用户数据,有以下几种情况: 1.      把文件恢复到以前的某个版本 2.      从存档中恢复文件和文件夹 3.      恢复删除的文件和文件夹 这里,存档指客户端在服务器上的备份.服务器会根据策略按预定的间隔备份客户端数据,从而产生多个存档. 以上三种方式本质上都是一样

Spring基础系列9 -- Spring AOP

Spring基础系列9 -- Spring AOP 转载:http://www.cnblogs.com/leiOOlei/p/3556054.html Spring AOP即Aspect-oriented programming,面向切面编程,是作为面向对象编程的一种补充,专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题.简单地说,就是一个拦截器(interceptor)拦截一些处理过程.例如,当一个method被执行,Spring AOP能够劫持正在运行的method,在met

R语言数据分析系列之八

R语言数据分析系列之八 -- by comaple.zhang 再谈多项式回归,本节再次提及多项式回归分析,理解过拟合现象,并深入cross-validation(交叉验证),regularization(正则化)框架,来避免产生过拟合现象,从更加深入的角度探讨理论基础以及基于R如何将理想照进现实. 本节知识点,以及数据集生成 1,        ggplot2进行绘图; 2,        为了拟合更复杂的数据数据集采用sin函数加上服从正太分布的随机白噪声数据; 3,        poly

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

这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全 4.mongo 3.4分片集群系列之四:搭建分片集群--哈希分片 + 安全 + 区域 5.mongo 3.4分片集群系列之五:详解平衡器 6.mongo 3.4分片集群系列之六:详解配置数据库 7.mongo 3.4分片集群系列之七:配置数据库管理 8.mongo 3

[Spring系列02]Spring AOP模拟

在博文[Spring系列01]Spring IOC/DI模拟中简略模拟了Spring IOC/DI的实现原理,本文接着模拟了Spring AOP的实现原理. 代码结构图如下: 全部代码如下: UserDAO.java package com.ctsh.dao; import com.ctsh.model.User; public interface UserDAO { public void save(User user); public void delete(); } UserDAO Use

SSH框架系列:Spring AOP应用记录日志Demo

分类: [java]2013-12-10 18:53 724人阅读 评论(0) 收藏 举报 1.简介 Spring 中的AOP为Aspect Oriented Programming的缩写,面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.以下是Spring AOP的小例子 源代码:https://github.com/nuptboyzhb/SpringAOPDemo 2.例子简介 2.1切面aspect:Logging.java [java] view plainc

SCCM 2012 R2实战系列之八:OSD(上)--分发全新Windows7系统

今天将跟大家一起分享SCCM 中最为重要的一个功能---操作系统分发(OSD),在此文章中会讨论到OSD的初始化配置.镜像的导入.任务序列的创建编辑.并解决大家经常遇到的分发windows7系统分区盘符为D和分发系统时非常慢等问题. 1. 前提条件 在开始操作系统分发之前请大家确保以完成以下的前提条件准备: 安装并正确配置DHCP服务器(可参照本系列的第四部分初始化配置的文章) 新建并正确配置边界和边界组 2. OSD初始配置 本部分的OSD初始化配置工作只需要做一次,在后面的OSD中不需要再次

SCCM2012 R2实战系列之八:OSD(上)-- 分发全新Windows7系统

今天将跟大家一起分享SCCM 中最为重要的一个功能---操作系统分发(OSD),在此文章中会讨论到OSD的初始化配置.镜像的导入.任务序列的创建编辑.并解决大家经常遇到的分发windows7系统分区盘符为D和分发系统时非常慢等待这些问题.   1. 前提条件    在开始操作系统分发之前请大家确保以完成以下的前提条件准备:      安装并正确配置DHCP服务器(可参照本系列的第四部分初始化配置的文章)      新建并正确配置边界和边界组    2. OSD初始配置    本部分的OSD初始化