SpringAOP实现(原理)
动态代理:在程序运行时,运用反射机制动态创建而成。
UserService :
*
* @Description 目标接口
* @author huyuangui@aliyun.com
* @time 2015年1月9日 下午2:28:00
* @version 1.0.0
*/
public interface UserService {
/**
* 根据ID删除用户
* @param id
* @return
*/
public String deleteUser(String id);
}
UserService实现类 :
/**
* @Description UserService实现类
* @author huyuangui@aliyun.com
* @time 2015年1月9日 下午2:28:31
* @version 1.0.0
*/
public class UserServiceImpl implements UserService {
public String deleteUser(String id) {
System.out.println("实现类修改ID前"+id);
System.out.println("实现类修改ID为1111");
id="1111";
return id;
}
}
JDK动态代理实现:
测试类:
Cglib动态代理 :
JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。
package com.gillion.aop.cglib;
/**
* @Description BOOK 普通java
* @author huyuangui@aliyun.com
* @time 2015年1月9日 下午2:51:40
* @version 1.0.0
*/
public class Book {
public String test(String id)
{
System.out.println("Book更改id前id:"+id);
id="123456";
System.out.println("Book更改id=123456");
return id;
}
}
代理类:BookCglib
package com.gillion.aop.cglib;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
/**
* @Description Cglib代理Book(普通java)
* @author huyuangui@aliyun.com
* @time 2015年1月9日 下午3:17:03
* @version 1.0.0
*/
public class BookCglib implements MethodInterceptor {
private Object target;
/**
* 创建代理对象
*
* @param target
* @return
*/
public Object getInstance(Object target) {
this.target = target;
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(this.target.getClass());
// 回调方法
enhancer.setCallback(this);
// 创建代理对象
return enhancer.create();
}
// 回调方法
public Object intercept(Object obj, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
System.out.println("Cglib事物开始");
System.out.println("Cglib设置第一个参数为1");
if(args!=null)
args[0]="1";
Object result=proxy.invokeSuper(obj, args);
System.out.println("Cglib调用后---返回结果:"+result);
System.out.println("Cglib改变返回结果:654321");
result="654321";
System.out.println("Cglib事物结束");
return result;
}
}
测试类:
SpringAOP实现(原理)的更多相关文章
- OOP的完美点缀—AOP之SpringAOP实现原理
OOP的完美点缀-AOP之SpringAOP实现原理 前言 OOP与AOP OOP(Object Oriented Programming,面向对象编程),通过封装.继承将程序抽象为各个层次的对象,进 ...
- spring框架学习笔记4:SpringAOP实现原理
AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入 ...
- SpringAOP 设计原理
1. 设计原理 引入了,代理模式. java 程序执行流: 如果从虚拟机的角度看,整个程序的过程就是方法的调用,我们按照方法的执行顺序,将方法调用成一串. 在方法之间有着Join Point 连接点 ...
- springAOP实现原理
spring AOP实现原理, spring 会在初始化的时候,创建一个BeanPostProcessor(AnnotationAwareAspectJAutoProxyCreator)用来为类注入切 ...
- SpringAop实现原理及代理模式
Spring Aop的原理 Spring的AOP就是通过动态代理实现的.当为某个Bean或者某些Bean配置切面时,Spring会为其创建代理对象,当调用该对象的某个方法时,实际是调用生成的代理类的对 ...
- springAOP配置原理
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...
- SpringAOP 原理解析
什么是AOP? 1: 传统的OOP编程他的代码逻辑是一种自上向下, 而在这些自上而下的过程中会产生一些横切性的问题,比如说:日志信息,权限校验认证,事务等, 2: 这些横切性问题,往往与我们的主业务逻 ...
- Spring知识点总结(四)之SpringAOP基础
1. Spring aop中的基本概念 • 连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候.在Spring AOP中,一个连接 ...
- 75道阿里Java面试题,你能答上几道?
整理了下阿里近几年的java面试题目,大家参考下吧,希望对大家有帮助,可以帮大家查漏补缺. 答对以下这些面试题,可以淘汰掉 80 % 的求职竞争者. 1.hashcode相等两个类一定相等吗?equa ...
随机推荐
- Javascript > Eclipse > 自动代码规范化
Reference: http://blog.csdn.net/jmyue/article/details/11060003 大项目往往是有很多人一起完成的,然而每个人都有自己的style,导致整个项 ...
- 关于html转pdf
本篇作为一个备忘,记录一下html转pdf中遇到的问题. 没有具体做这个东西的时候不知道,网络上能将html转换成pdf的资源并不太多,使用上有很多都存在一些问题.能完美将一个站点中的页面(这里说一个 ...
- [Python]简易terminal歌词滚动播放器
整合了网易云的一些API,想写一个terminal版的音乐播放器,但是还没有想好写成什么样子. 暂时写了一个必须又的功能:带歌词滚动的播放器,用了pygame里的mixer来播放音乐. 准备有时间的时 ...
- linux启动流程及自定义gurb
linux 启动流程 POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----> MBR(bootloader) 提供内核列表 -------& ...
- 学习UFT11.5历程(三)
已经用UFT11.5完成了几个大流程的录制和脚本调测. 现整理下这段过程中脚本中应该记住的点(QTP是VB脚本): 1. 循环和条件部分_reporter结果展示 For i = 1 To brow ...
- Compare接口
1.Comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 .实现此接口的对象列表(和数组)可以通过 ...
- weex 小结--内建模块
使用以下模块时,需要导入依赖:var *** = require('@weex-module/****'); 1. navigator --像浏览器一样切换页面 2. webview(module) ...
- RabbitMQ之入门
生成者: #coding:utf-8 import sys import pika credentials=pika.PlainCredentials("guest"," ...
- zabbix3.0.4 部署之九 (zabbix3.0.4 Linux Agent安装)
1.从官网现在源码镜像 http://nchc.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.2.1/zabbix-3. ...
- JQuery筛选器全系列介绍
jQuery提供了强大的选择器让我们获取对象.在这边,我人为地将jQuery选择器分为两大部分:选择对象和筛选条件.选择对象表示要获取什么对象,筛选条件是对获取的对象进行筛选,最终留下符合某些特征的对 ...