`
wiley
  • 浏览: 254330 次
  • 性别: 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 Spring框架核心介绍中,DI(Dependency Injection,依赖注入)和AOP(Aspect-Oriented Programming,面向方面编程)是两个非常重要的概念。DI解决了类与类之间的依赖关系,让类可以专注...

    初识SmartJS - AOP三剑客

    由于功能较多,SmartJS打算以小版本迭代的方式逐个实现,目前已经发布的0.1版本主要集中在前端面向切面编程(AOP)的支持上。 AOP(面向切面编程)是一种编程范式,目的是让开发者能够将横切关注点(cross-cutting ...

    初识Spring

    【初识Spring】 Spring框架是Java企业级应用开发中的核心框架,它为开发者提供了一个全面的基础设施,用于创建稳定、高性能的应用程序。Spring的核心特性包括依赖注入(Dependency Injection,DI)、面向切面编程...

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

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

    初识Spring框架-资料.rar

    Spring框架是Java开发领域中最广泛使用的轻量级框架之一,以其强大的依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)能力而闻名。初学者通过“初识Spring框架-...

    01Spring初识.pdf

    Spring框架是Java开发领域非常著名的开源框架,它的初识主要可以分为两个部分:框架的基本概念和Spring框架的设计理念。 首先,从框架的基本概念来看,它是由一系列类和接口组成的集合,这些类和接口协调工作以完成...

    初识java,用springBoot学习java.zip

    Spring的核心特性包括依赖注入(DI)和面向切面编程(AOP),这些使得代码更加模块化和易于维护。Spring Boot是Spring生态系统的简化版,它通过默认配置和自动配置来消除大量的XML配置,让开发者可以更快地启动项目...

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

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

    第1章 初识Spring的基本应用.ppt

    **Spring的概述**强调了Spring作为一个轻量级、分层的框架,它以IoC和AOP为核心,支持JavaSE和EE应用。Spring在表示层、业务逻辑层和持久层提供了全面的技术支持,可以与Struts、Hibernate、JdbcTemplate等框架无缝...

    初识 Spring Security - v1.1.pdf

    ### 初识 Spring Security #### 一、Spring Security 概述 **Spring Security**是一种广泛应用于Java企业级项目中的安全框架,它基于Spring AOP(面向切面编程)和Servlet过滤器来提供全面的安全解决方案。该框架...

    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 | 卓越

    初识[Struts2.0]并[使用Struts2.0]进行SSH集成

    在"初识[Struts2.0]并[使用Struts2.0]进行SSH集成"的学习过程中,"userLogin"可能是一个示例应用,涉及用户登录功能。用户登录通常包括用户输入验证、数据库查询等操作,这些可以通过Struts2.0的Action实现,而...

    1. Spring初识-核心容器.pdf

    - 面向切面编程(AOP),它提供了一种将横切关注点(例如日志、事务管理等)从业务逻辑中分离出来的方式。 - 控制反转(IoC),这是一种设计模式,用于实现组件之间的依赖关系,降低程序的耦合性。 - 依赖注入(DI)...

    Java开发学习(一)----初识Spring及其核心概念.doc

    2. **AOP层**:面向切面编程(AOP)是Spring提供的一种强大的功能,用于在不修改源代码的情况下添加额外功能。它包括Aspects,即实现AOP思想的具体模块。 3. **数据层**:数据访问(Data Access)和数据集成(Data ...

    01 - 初识Java ASM - 简书1

    - 动态生成类:开发者可以利用ASM在运行时动态生成新的类,这在创建动态代理或者实现AOP(面向切面编程)时非常有用。 - 类文件转换:ASM可以修改现有的类文件,生成新的类,例如在代码覆盖率工具Cobertura和Jacoco...

    初识java,用springBoot学习java

    - **Spring框架了解**:学习Spring的基本原理,如IoC(控制反转)和AOP(面向切面编程)。 - **Spring Boot实战**:创建第一个Spring Boot项目,了解启动器、自动配置等特性。 - **Web开发**:学习如何使用Spring...

    Spring学习课件PPT

    1. **初识Spring.ppt** - 这一部分通常会介绍Spring的基本概念,包括Spring框架的发展背景、目标和架构。它可能会涵盖Spring的核心模块,如Core Container(核心容器),它由Bean Factory和ApplicationContext组成,...

    Beginning Spring 5 From Novice to Professional

    2. **AOP(面向切面编程)**:了解AOP的基本原理,学习如何使用Spring AOP实现日志记录、事务管理等切面。 3. **数据访问**:探讨Spring与各种数据库的集成,包括JDBC、Hibernate和MyBatis等ORM框架的使用。同时,...

Global site tag (gtag.js) - Google Analytics