`
wiley
  • 浏览: 251887 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

初识AOP

阅读更多
百事通信息网


    学习Spring AOP之前,先来了解一下AOP。
    AOP应用到项目中的好处,能够将与业务逻辑不相关的代码(如:日志、权限等)分离出来,减小相关业务类负担,并能让一些通用需求(如:事务)得到更广泛的复用。
AOP的实现是利用了java核心的代理机制,分静态代理与动态代理。
静态代理要求代理对象与被代理对象都实现同一个接口
接口:
public interface IBusiness{
	public void doBusiness();
}
实现:
public class BusinessImpl implements IBusiness{
	public void doBusiness(){
		System.out.println("业务主体部分");
	}
}
代理:
public class BusinessProxy implements IBusiness{
	private BusinessImple bi=null;
	public BusinessProxy(BusinessImple bi){
		this.bi=bi;
	}
	public void doBusiness(){
		System.out.println("事务、日志、权限等操作");
		bi.doBusiness();
		System.out.println("事务、日志、权限等操作");
	}
}
应用:
public class AOPAppDemo{
	public static void main(String[] args){
		BusinessImpl bi=new BusinessImple();
		BusinessProxy proxy=new BusinessProxy(bi);
		proxy.doBusiness();
	}
}

    上述代码就是通过静态代理实现了AOP,BusinessProxy代理了BusinessImpl的doBusiness方法。但是静态代理一般不能满足我们项目开发的需求,如果业务需求很多它得为每一个业务方法一一做代理,动态代理正好解决了这一缺点,接下来我们来说说动态代理吧。
    动态代理,需实现一个InvocationHandler的接口,重写invoke(Object proxy,Method method,Object[] args)方法,代理对象实例由Proxy.newProxyInstance(ClassLoader loader,Class interfaces,InvocationHandler h)方法生成,当代理对象的方法被执行时,通知执行器(InvocationHandler)执行invoke(Object proxy,Method method,Object[] args)方法,invoke方法内调用了method.invoke(Object obj,Object... args)方法,该方法对带有指定参数的指定对象调用由此 Method 对象表示的基础方法,应该这时才真正代理执行了业务逻辑(这里我是这样理解的,不知对不对)。
    接下来用代码说明上述动态代理原理,与静态代理相比接口与实现保持不变
接口:
public interface IBusiness{
	public void doBusiness();
}
实现:
public class BusinessImpl implements IBusiness{
	public void doBusiness(){
		System.out.println("业务主体部分");
	}
}
执行器:
public class BusinessHandler implements InvocationHandler{
	private BusinessImpl bi=null;
	public BusinessHandler(BusinessImpl bi){
		this.bi=bi;
	}
	public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
		System.out.println("事务、日志、权限等操作");
		method.invoke(bi,args);
		System.out.println("事务、日志、权限等操作");
	}
	}
}
应用:
public class AOPAppDemo{
	public static void main(String[] args){
		BusinessImple bi=new BusinessImple();
		BusinessHandler bh=new BusinessHandler(bi);
		IBusiness proxy=(IBusiness)Proxy.newProxyInstance(bi.getClass().getClassLoader(),bi.getClass().getInterfaces(),bh);
                  proxy.doBusiness();
	}
}

    夜深了,今天就先到这里吧,下一次接着学习Spring AOP。

分享到:
评论
7 楼 hzxlb910 2013-07-16  
例子还是短小看着一目了然。不错
6 楼 just4love 2006-12-01  
pro_ygw 写道
wiley:
   在matrix也看到你的文章,请问这个proxy有没有通过配置文件实现,不然的话,每次进行日志、权限操作的时候都要进行上述main函数操作


spring 的aop就是通过ioc实现配置的。原理上都是一样的,都是通过反射使用动态代理来完成的。
5 楼 sunnyflurry 2006-11-24  
lz的
public BusinessProxy(BusinessImple bi){ 
         this.bi=bi; 
}
传入的参数应该是:IBusiness接口,而不是接口的实现类吧
4 楼 JavaFlasher 2006-11-21  
引用
IBusiness proxy=(IBusiness)Proxy.newProxyInstance(bi.getClass().getClassLoader(),bi.getClass().getInterfaces(),bh);


楼主能不能 详细解释一下这句话 ? 谢谢。
3 楼 luckier 2006-11-16  
呵呵,期待楼主的Spring AOP心得。
2 楼 pro_ygw 2006-11-15  
wiley:
   在matrix也看到你的文章,请问这个proxy有没有通过配置文件实现,不然的话,每次进行日志、权限操作的时候都要进行上述main函数操作
1 楼 winer0722 2006-11-09  
关注中

相关推荐

    AspectJ Cookbook中文版

     ·初识aop  ·集成aspectj与eclipse、ant和java命令行工具  ·将面向方面的应用程序部署为servlet、jsp、web服务等  ·关于方面、切入点、通知以及核心aop构造的每个方面的秘诀  ·在java和j2ee设计模式实现中...

    Spring基础篇之初识DI和AOP

    主要为大家详细介绍了Spring基础篇之初识DI和AOP,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    初识SmartJS - AOP三剑客

    隔了好久才终于又发布了一点东西,SmartJS是最近才开始搞的一个开源js库,目的是做一些比较有特点的事情(smartjs暂时也是依赖于jquery)。

    spring-AOP面向切面编程所需jar包.zip

    该压缩包包含--学习笔记(05):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:--系列博客中新需要的三个jar包。包括spring-aspects-5.2.7.RELEASE.jar和spring-aop-5.2.7.RELEASE.jar和...

    SSM框架的学习与应用-Java EE企业级应用开发学习记录-(第六天)初识Spring框架

    本资源是一篇关于学习和应用SSM框架(Spring、SpringMVC、MyBatis)的学习记录系列文章中的第六天内容,主题为初识Spring框架。 在这一部分中,你将了解到Spring框架的基本概念和使用方法,并通过实例探讨了Spring ...

    spring-basic:弹簧基础

    spring-basic spring核心知识学习 弹簧芯 2015-05-18 ...初识spring aop AOP(注解) 弹簧 mvc 1.第一次Spring MVC 2.Spring MVC 查看JSON | XML | PDF 3.Spring MVC 查看JSON | XML | PDF | 卓越

    Spring中Bean的讲解

    Spring-AOP框架请参考:AOP详解 文章目录一.Bean的简介二.Bean相关配置三.自动装配四.Bean的生命周期 一.Bean的简介 Spring 官方文档对 bean 的解释是: In Spring, the objects that form the backbone of your ...

    Java Web编程宝典

    主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用、Spring核心之IoC、...

    深入解析Java Spring框架

    我们将深入研究Spring的核心组件,如IoC容器、AOP模块、数据访问层、Web模块等,揭示其在应用开发中的关键作用。 二、个人心得体会 2.1 初识Spring的感受 分享我初次接触Spring的经历,包括遇到的挑战和对框架的第...

    ASP.NET编程宝典光盘源码

    主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用、Spring核心之IoC、...

    ASP.NET编程宝典(十年典藏版)》光盘源码1

    主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用、Spring核心之IoC、...

    《Java Web编程宝典(十年典藏版)》光盘源码

    主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用、Spring核心之IoC、...

    《ASP.NET编程宝典(十年典藏版)》光盘源码2

    主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用、Spring核心之IoC、...

    Spring系列——带你走进Spring大门!

    写在前面: 小伙伴儿们,大家好! 上一期我们讲了计算机...1,初识Spring; 1. 百科介绍: 2. 核心思想: IOC控制反转; AOP面向切面; 3. 官网及下载jar包地址: 官网: https://spring.io/ 最新开发包下载地址: ...

    SpringAll_wuyouzhuguli.tar.gz

    Spring Boot AOP记录用户操作日志 Spring Boot中使用thymeleaf Spring Boot中使用Redis缓存数据 Spring Boot中使用Ehcache缓存数据 Spring Boot中的JSON技术 Spring Boot中编写单元测试 Spring Boot整合Swagger2构建...

    java抓取技术源码-itstack-demo-bytecode:本专栏主要针对字节码编程系列知识栈进行编写文章学习。在字节码编程方便有三个比

    初识字节码编程是从使用非入侵的全链路监控开始,在这之前我所了解的如果需要监控系统的运行状况,通常需要硬编码埋点或者AOP的方式采集方法执行信息;耗时、异常、出入参等来监控一个系统的运行健康度。而这样的...

    asp.net知识库

    技术基础 New Folder 多样式星期名字转换 [Design, C#] .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 ...

    低清版 大型门户网站是这样炼成的.pdf

    2.1 初识mvc新秀struts 2 33 2.1.1 mvc概述 33 .2.1.2 struts 2的mvc实现 35 2.1.3 struts 2的基本组成 36 2.1.4 struts 2的常用类介绍 38 2.1.5 struts 2的业务控制器action实现 39 2.1.6 struts 2的处理...

Global site tag (gtag.js) - Google Analytics