- 浏览: 269682 次
- 性别:
- 来自: 杭州
最新评论
-
qiumin333:
所以正数最大位0111 1111,也就是数字127, 负数最 ...
Java byte数据类型详解 -
weizhikang1992:
[b][flash=200,200][list][*]引用[/ ...
Java中AOP技术详解 -
lizhengzy:
[啊啊啊]
Java中AOP技术详解 -
iyaodi:
呃,错了,按位与0xff不等于*(-255)
Java byte数据类型详解 -
iyaodi:
<div class="quote_title ...
Java byte数据类型详解
AOP是Aspect Oriented Programming的缩写,意思是面向方面编程,与OOP(Object Oriented Programming)面向对象编程对等,都是一种编程思想。 从OOP角度分析,我们关注业务的处理逻辑,是属于纵向的行为,从AOP角度分析,我们关注对象行为发生时的问题,是属于横向的行为。 AOP 作用: 1 监控函数的调用 2 捕获异常发生 实际应用在:事务、安全、日志等横切关注。 两种实现AOP的方式: 1,JDK提供的动态代理实现 //接口 public interface UserBean { void getUser(); void addUser(); void updateUser(); void deleteUser(); } //原始实现类 public class UserBeanImpl implements UserBean { private String user = null; public UserBeanImpl() { } public UserBeanImpl(String user) { this.user = user; } public String getUserName() { return user; } public void getUser() { System.out.println("this is getUser() method!"); } public void setUser(String user) { this.user = user; System.out.println("this is setUser() method!"); } public void addUser() { System.out.println("this is addUser() method!"); } public void updateUser() { System.out.println("this is updateUser() method!"); } public void deleteUser() { System.out.println("this is deleteUser() method!"); } } //代理类 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import com.cignacmc.finance.bean.UserBeanImpl; public class UserBeanProxy implements InvocationHandler { private Object targetObject; public UserBeanProxy(Object targetObject) { this.targetObject = targetObject; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { UserBeanImpl userBean = (UserBeanImpl) targetObject; String userName = userBean.getUserName(); Object result = null; //权限判断 if(userName != null && !"".equals(userName)) { result = method.invoke(targetObject, args); } return result; } } //测试类 import java.lang.reflect.Proxy; import com.cignacmc.finance.bean.UserBean; import com.cignacmc.finance.bean.UserBeanImpl; import com.cignacmc.finance.proxy.UserBeanProxy; public class ProxyExe { public static void main(String[] args) { System.out.println("Proved............."); UserBeanImpl targetObject = new UserBeanImpl("Bob Liang"); UserBeanProxy proxy = new UserBeanProxy(targetObject); //生成代理对象 UserBean object = (UserBean)Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), proxy); object.addUser(); System.out.println("NO Proved............."); targetObject = new UserBeanImpl(); proxy = new UserBeanProxy(targetObject); //生成代理对象 object = (UserBean)Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), proxy); object.addUser(); } } 输出: Proved............. this is addUser() method! NO Proved............. 从上面这个例子可以成功拦截了调用的方法addUser()并对其做了相应的处理 2, 通过cglib创建代理类, 好处是不要求我们的目标对象实现接口 //原始类 public class ClientBean { private String name = null; public ClientBean() { } public ClientBean(String name) { this.name = name; } public void addClient() { System.out.println("this is addClient() method!"); } public void deleteClient() { System.out.println("this is deleteClient() method!"); } public void getClient() { System.out.println("this is getClient() method!"); } public void updateClient() { System.out.println("this is updateClient() method!"); } public String getClientName() { return name; } public void setClientName(String name) { this.name = name; } } //代理类 import java.lang.reflect.Method; import com.cignacmc.finance.bean.ClientBean; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class CGLibProxy implements MethodInterceptor { private Object targetObject; public Object createProxyObject(Object targetObject) { this.targetObject = targetObject; Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(this.targetObject.getClass()); enhancer.setCallback(this); return enhancer.create(); } public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { ClientBean clientBean = (ClientBean)targetObject; String userName = clientBean.getClientName(); Object result = null; if(userName != null && !"".equals(userName)) { result = method.invoke(targetObject, args); } return result; } } //测试类 import java.lang.reflect.Proxy; import com.cignacmc.finance.bean.ClientBean; import com.cignacmc.finance.bean.UserBean; import com.cignacmc.finance.bean.UserBeanImpl; import com.cignacmc.finance.proxy.CGLibProxy; import com.cignacmc.finance.proxy.UserBeanProxy; public class ProxyExe { public static void main(String[] args) { System.out.println(".............CGLIB Proxy...................."); System.out.println("Proved...................."); CGLibProxy cproxy = new CGLibProxy(); ClientBean clientBean = (ClientBean)cproxy.createProxyObject(new ClientBean("Bob Liang")); clientBean.addClient(); System.out.println("NO Proved...................."); cproxy = new CGLibProxy(); clientBean = (ClientBean)cproxy.createProxyObject(new ClientBean()); clientBean.addClient(); } } 输出: .............CGLIB Proxy.................... Proved.................... this is addClient() method! NO Proved.................... 切面(Aspect):对横切关注点的抽象(类似类对对象的抽象) 连接点(JoinPoint):被拦截到的点,泛指方法 切入点(CutPoint):对哪些连接点进行拦截的定义 通知(Advice):在特定的连接点,AOP框架执行的动作.前置/后置/例外/最终/环绕通知(调用方法之前执行,全部执行完毕之后) 引入(Introduction): 添加方法或字段到被通知的类。 Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现 IsModified接口,来简化缓存。 目标对象(Target Object): 包含连接点的对象。也被称作 被通知或被代理对象。 AOP代理(AOP Proxy): AOP框架创建的对象,包含通知。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。 织入(Weaving): 组装方面来创建一个被通知对象。这可以在编译时 完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样, 在运行时完成织入。
评论
2 楼
weizhikang1992
2016-06-22
[b]
[/b]
[flash=200,200][list] |
[*]
|
[/list] [/flash] |
1 楼
lizhengzy
2015-07-04
[啊啊啊]
发表评论
-
java 序列化的说明
2013-01-23 13:49 981当父类继承Serializable接口,所有子类都可以被序列 ... -
String.split() 需要注意的问题
2012-07-31 12:29 885特殊的分割符号:| * + \ \\ 在使用Str ... -
Object中getClass()方法详解
2012-07-31 12:29 29645Obejct类有一个getClass()方法: 返回 ... -
JVM运行时内存分配
2012-07-31 12:31 1888Inside JVM运行时数据区 ============ ... -
JRE 与 JDK ,JVM Client Server了解
2012-07-31 12:37 1124JRE 与 JDK ,JVM Client Server ... -
Java字符串及其编码
2012-07-31 12:37 1258编码:将字符以编码 ... -
Java中ASM框架详解
2012-08-01 23:48 17034什么是asm呢?asm是assembly的缩写,是汇编的 ... -
Java源代码文件与public类同名
2012-08-01 23:47 1054java源文件的命名规则是这样的: 1,扩展名必须 ... -
Java异常体系结构详解
2012-08-01 23:47 2000Java所有Exception, Error的父接口:T ... -
Java 线程栈信息详解
2012-08-01 23:48 5137windows系统中: 进程所拥有的内存空间都是独立 ... -
Java 启动类
2012-08-02 12:34 1044Launcher是JRE中用于启动程序入口main()的类。 -
Java 内存泄露浅析
2012-08-02 12:35 1657Java使用有向图的方 ... -
Java命令java, javac, jar
2012-08-02 12:35 2285java 用法: (执行 ... -
Java 进程,线程退出问题
2012-07-30 22:49 0Java的Main所在的线程启动一个新的线程以后,两个线 ... -
Java 环境变量详解
2012-08-02 12:35 1211当我们在Windows系统上安装jdk或者jre之后。 必须 ... -
Java 线程Thread详解
2012-08-02 12:35 2159在Java中,实现多线程的 ... -
Java的局部内部类以及final类型的参数和变量
2012-07-30 19:27 0如果定义一个局部内部类,并且希望它使用一个在其外部定的对 ... -
Java的transient, volatile, strictfp关键字详解
2012-07-30 19:26 0Java中的transient,volati ... -
Java代理模式,代理类(Proxy)详解
2012-07-30 19:24 0Java代理模式 1.代理模式 代理模式的作用是: ... -
Java常用jar包信息和关系介绍
2012-07-30 19:22 0Java发送邮件需要的jar包: mail.jar ac ...
相关推荐
主要介绍了java Spring AOP详解及简单实例的相关资料,需要的朋友可以参考下
Spring之AOP配置文件详解.txt Spring之AOP配置文件详解.txt 帮助你更快张握Java的学习!
NULL 博文链接:https://messon619.iteye.com/blog/1060477
本资源利用文档加源码的方式较详细的介绍了JDK 动态代理和Spring的AOP机制.相信对您理解相关方面的知识有很大作用.
Spring3.0 AOP 详解,包括:概念、原理、实现、及配置代码
详解使用Java原生代理实现AOP实例共4页.pdf.zip
Android AOP注解Annotation详解(一) Android AOP之注解处理解释器详解(二) Android AOP 注解详解及简单使用实例(三) 一、简介 在Android 里面 注解主要用来干这么几件事: 和编译器一起给你一些提示警告信息...
Android AOP注解Annotation详解(一) Android AOP之注解处理解释器详解(二) Android AOP 注解详解及简单使用实例(三) Android AOP 等在Android上应用越来越广泛,例如框架ButterKnife,Dagger2,EventBus3等等...
Spring提供了面向切面很好的AOP技术,用动态代理简化很多代码。设计java反射机制的一些内容,稍微有点抽象。
此文档主要是讲述Spring中很关键的一个知识点,面向切面编程。
Java web 开发中的必备神器。IOC和AOP深刻理解其原理,基础代码测试。完整的基础测试项目打包。妈妈再也不用担心我不懂切面编程和控制反转了。干货。仅供初学者使用。
AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。之前看了一个博客说到,提到AOP大家都知道他的实
主要介绍了Java AOP知识详细介绍的相关资料,需要的朋友可以参考下
您将了解如何使用Java的反射机制来创建代理对象,以及如何将横切逻辑注入到目标方法中。我们还提供了实际示例,演示如何在Spring AOP中使用JDK动态代理。 CGLib动态代理: 我们将深入研究CGLib动态代理,它允许您在...
企业架构师必备技能(JAVA核心技术反射) JavaWeb之基础(手写实现Tomcat服务器) java多线程编程 纯手写实现SpringIOC实现过程 JEE企业级开发(企业级项目开发权威指南) 网络爬虫之JAVA正则表达式 手写springMVC框架 老...
AOP是OOP的延续,是软件开发中的一个热点,也是JAVA 中Spring框架的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可...
在微服务流行的当下,在使用Spring Cloud / Spring Boot框架开发中,AOP使用的非常广泛,尤其是@Aspect注解方式当属最流行的,不止功能强大,性能也很优秀,还很舒心!所以本系列就结合案例详细介绍@Aspect方式的切...
主要介绍了应用市场中Java拦截器和切面的使用实例详解,具有一定借鉴价值,需要的朋友可以参考下
一个是IoC,另一个是AOP,对于IoC,依赖注入不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理是java的动态代理机制...
主要介绍了详解AOP与Filter拦截请求打印日志实用例子,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧