`
ivan18248
  • 浏览: 25534 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

spring学习笔记--AOP代理对象【1】

阅读更多
小弟现在学spring的一些应用,顺便记录下来供以后学习和供大家参考,有什么不对的地方不妨指出来@~~@  !!


首先我们学习spring AOP之前学一学 传统AOP的实现:
我们的需求是这样的:
1,判断用户不为空(user!=null)时执行业务代码
2,拦截所有业务方法
这样我们传统的方法是每个业务方法里面判断user是不是null值(假设这样的判断有足够多),这样一来随着我们的业务方法的增多判断语句也随即多起来,那我们又没有跟好方法避免这个情况呢?

设计模式--Proxy

客户端-------》代理对象------》目标对象

首先我们提供一个interface
package javaeye.service
public interface PersonService {
	public void save(String name);
	public void update(String name, Integer personid);
	public String getPersonName(Integer personid);
}


PersonService 接口的实现
package javaeye.service.impl;

import javaeye.service.PersonService;

public class PersonServiceBean implements PersonService{
	private String user = null;
	
	public String getUser() {
		return user;
	}

	public PersonServiceBean(){}
	
	public PersonServiceBean(String user){
		this.user = user;
	}

	public String getPersonName(Integer personid) {
		System.out.println("我是getPersonName()方法");
		return "javaeye";
	}

	public void save(String name) {
		System.out.println("我是save()方法");
	}

	public void update(String name, Integer personid) {
		System.out.println("我是update()方法");
	}

}



用jdk提供的代理类Proxy 来实现 实现这时候PersonServiceBean 类必须实现PersonService接口
package javaeye

import java.lang.reflect.proxy;
public class JDKProxyFactory implements InvocationHandler{

private Object targerObject;

public Object createProxyIntance(Object targetObject){
	this.targetObject = targetObject;
	return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), 
				this.targetObject.getClass().getInterfaces(), this);
//jdk里面的  Proxy.getProxyClass(loader, interfaces).
         getConstructor(new Class[] { InvocationHandler.class }).
         newInstance(new Object[] { handler });


//在这里用Proxy.newProxyInstance来创建代理类,第一个参数是目标对象的类装载器,第二个参数是我们的代理对象要实现的接口那一些,我们实现的是this.targerObject的所有类,第三个参数是回调函数(this是本身),如果这样必须继承接口 InvocationHandler

//Object java.lang.reflect.InvocationHandler.invoke(Object proxy, Method method, //Object[] args)

public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		PersonServiceBean bean = (PersonServiceBean) this.targetObject;
		Object result = null; 
		if(bean.getUser()!=null){
			try {
				result = method.invoke(targetObject, args);
 //把方法的调用委派给目标对象
			} catch (RuntimeException e) {
			}finally{
                         //
			}
		}
		return result;
	}

}


测试
@Test public void proxyTest(){
		JDKProxyFactory factory = new JDKProxyFactory();
		PersonService service = (PersonService) factory.createProxyIntance(new PersonServiceBean("xxx"));
		service.save("javaeye");
	}


下一章是关于动态代理的实现 --》cglib
分享到:
评论
6 楼 wkbulletin 2010-03-27  
最近项目改版, 利用了spring的 aspectj . 对此有了一点点了解.
有对此感兴趣的可以联系我. 相互交流下.
5 楼 yuanyong 2010-03-19  
最经也在看AOP这块

代理就是通过在调用目标对象的时候 一些操作
4 楼 hustcen 2010-03-18  
代理这玩意儿真的好复杂
3 楼 linux1689 2010-01-22  
推荐《Spring技术内幕——深入解析Spring架构与设计原理》给楼上的2位。
2 楼 5年后我娶你 2010-01-21  
学过,不过忘得差不多了。现在做的不是这些东西。。不过还是有一些思想吧。
1 楼 印度阿三 2010-01-21  
我是个小菜 在学ssh 框架就是感觉 spring 老难学了 AOP 和那个控制反转 把 我给搞糊涂了
看了LZ列子  学习一下

相关推荐

    spring aop 学习笔记

    本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...

    Spring学习笔记-cqupt

    在本篇 Spring 学习笔记中,我们将探讨 Spring 的入门、优点、组成以及重要的IOC理论。 1. **Spring 简介** Spring 是一个开源的、免费的 Java 框架,它的目标是减少企业级开发的复杂性。它集成了许多现有的技术,...

    Spring学习笔记(14)----使用CGLIB实现AOP功能

    在本篇Spring学习笔记中,我们将探讨如何使用CGLIB库来实现AOP功能。 CGLIB(Code Generation Library)是一个强大的高性能的代码生成库,它被广泛用于动态代理和运行时织入AOP切面。在Spring中,如果目标类没有...

    Spring-IOC-AOP.md

    Spring学习笔记,主要包括核心技术IOC和AOP

    spring-framework-2.5-rc2-with-dependencies\spring-framework-2.5-rc2\spring-framework-2.5-rc2docs

    这个文档集合包括了Spring的API参考、用户指南、开发者笔记等,是学习和使用Spring 2.5 RC2的宝贵资源。 首先,让我们了解一下Spring的核心特性。2.5版本引入了一些重要的增强,如依赖注入(Dependency Injection,...

    Spring学习笔记(16)----使用Spring配置文件实现AOP

    在本篇Spring学习笔记中,我们将深入探讨如何利用Spring配置文件来实现面向切面编程(AOP)。面向切面编程是Spring框架的核心特性之一,它允许我们把关注点分离,将横切关注点(如日志、事务管理、权限控制等)与...

    Spring学习笔记(15)----使用Spring的注解方式实现AOP

    在本篇Spring学习笔记中,我们将深入探讨如何利用Spring框架的注解方式来实现面向切面编程(AOP)。AOP是一种编程范式,它允许我们定义横切关注点,如日志、事务管理等,然后将这些关注点模块化并插入到应用程序的多...

    SSH笔记-AOP

    - **JDK动态代理**:当目标对象实现了接口时,Spring可以创建一个代理对象,该代理对象在调用目标方法前后执行额外的逻辑。这种方式是接口驱动的,适用于有接口的情况。 - **CGLIB代理**:如果目标对象没有实现...

    Spring学习笔记(13)----动态代理模式分析演示

    在本篇Spring学习笔记中,我们将深入探讨动态代理模式,并结合Spring框架的实现进行分析演示。动态代理模式是Java编程中一种重要的设计模式,它允许我们在不修改原对象代码的情况下,为对象添加额外的功能或行为。...

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    spring ioc aop mvc boot-学习笔记.docx

    Spring框架是Java开发中不可或缺的一部分,它为开发者提供了强大的依赖注入(IOC)和面向切面编程(AOP)功能,以及用于构建Web应用程序的MVC框架。Spring Boot则是基于Spring框架构建的应用程序启动器,旨在简化...

    Spring2.5.6学习笔记-最新

    以上是 Spring 2.5.6 学习笔记中的关键知识点,通过这些基础知识的学习,开发者可以开始构建基于 Spring 框架的应用程序。接下来,可以进一步深入学习 Spring 的高级特性,如事务管理、安全性、Web 开发等方面的知识...

    Spring.NET学习笔记 - 刘冬.NET - 博客园

    这个压缩包包含了一系列刘冬.NET在博客园上发布的Spring.NET学习笔记,帮助读者深入理解这个强大的框架。 1. **控制反转(IoC)**: 控制反转是Spring.NET的核心概念之一,它将对象的创建和管理权交给了框架,而...

    Spring学习笔记(12)----静态代理模式分析演示

    在本篇Spring学习笔记中,我们将探讨静态代理模式在Spring框架中的应用与分析。静态代理是一种常见的设计模式,它在不修改目标类代码的情况下,通过代理类来扩展或增强目标类的功能。在Spring中,静态代理主要应用于...

    SpringAop学习笔记以及实现Demo

    **Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...

    Spring.NET学习笔记-实现一个简易的IoC框架

    ### Spring.NET学习笔记-实现一个简易的IoC框架 #### 一、背景介绍与理论基础 在.NET领域中,Spring.NET框架是一个非常重要的轻量级框架,它支持依赖注入(Dependency Injection, DI)和面向切面编程(Aspect ...

    Spring学习笔记(精华全记录)

    ### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...

    SpringBoot-事务&AOP-黑马程序员学习笔记

    本笔记主要关注Spring Boot中的两个核心概念:事务管理和面向切面编程(AOP)。我们将深入探讨这两个主题,理解它们的工作原理以及如何在实际项目中应用。 ### 事务管理 事务是数据库操作的基本单元,确保数据的...

    Spring Aop 学习笔记

    Spring Aop 学习笔记

    Spring学习笔记

    ### Spring学习笔记:深入理解AOP与Annotation驱动的动态代理 #### 核心知识点解析: 在探讨Spring框架中AOP(面向切面编程)及基于Annotation的动态代理之前,我们首先需要了解AOP的基本概念及其在Spring中的实现...

Global site tag (gtag.js) - Google Analytics