`
soleares
  • 浏览: 14665 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
社区版块
存档分类
最新评论

传统AOP编程方式

阅读更多
一直也没明白AOP是个什么玩意,直到看了传智播客的Spring视频,才明白了一些,当然这不是广告,我一直是想感谢那些把视频在网上分享的前辈,你们真的很伟大!
AOP对我来说一直很神秘,当然是在用框架的时候,现在我们来试试不用框架该如何实现,这样应该能够对理解AOP有一些好处!GO……
这个程序模拟的是一个权限控制,当然使用了java提供的Proxy模式中的一些方法和接口,还使用了反射技术。

首先,创建一个业务bean,当然得提供其接口,Proxy能够是用的前提就是要面向接口编程
//业务bean的接口
package cn.soleares.jdkaop.service;

public interface SomeService {
	public void save(Object object);
}


//业务bean
package cn.soleares.jdkaop.service.impl;

import cn.soleares.jdkaop.service.SomeService;

public class SomeServiceImpl implements SomeService {

        //user为权限控制参数,即user是null时无权限执行save方法
	
        private String user = null; 
 	
	public SomeServiceImpl(){}
	
	public SomeServiceImpl(String user){
		this.user = user;
	}
	
	public String getUser() {
		return user;
	}

	public void save(Object object) {
		System.out.println("running in save() method!");
	}

}


其次,proxy类的创建
package cn.soleares.jdkaop.aop;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import cn.soleares.jdkaop.service.impl.SomeServiceImpl;

public class JDKProxyFactory implements InvocationHandler {
        //需要被代理的对象
	private Object targetObject;

	public Object createProxyIntance(Object targetObject) {
		this.targetObject = targetObject;

        //newProxyInstance是产生代理对象
        //参数1:需要被代理的对象所在类的类装载器
        //参数2:需要被代理的对象所在类所实现的所有接口
        //参数3:设置回调函数,也就是实现了InvocationHandler接口的类的对象

		return Proxy.newProxyInstance(this.targetObject.getClass()
				.getClassLoader(),
				this.targetObject.getClass().getInterfaces(), this);
	}

        //回调函数,InvocationHandler接口的方法
        //参数1:代理对象
        //参数2:需要代理的对象调用的方法
        //参数3:参数2中方法的参数
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		SomeServiceImpl someService = (SomeServiceImpl) targetObject;
		Object result = null;
		if (someService.getUser() != null) {
			result = method.invoke(targetObject, args);
		}
		return result;
	}

}


最后,编写测试类

package cn.soleares.test;

import org.junit.BeforeClass;
import org.junit.Test;

import cn.soleares.jdkaop.aop.JDKProxyFactory;
import cn.soleares.jdkaop.service.SomeService;
import cn.soleares.jdkaop.service.impl.SomeServiceImpl;

public class AOPTest {
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@Test 
	public void proxyTest(){
		JDKProxyFactory factory = new JDKProxyFactory();

        //如果不传入参数“xxx”,service的save方法就不会被调用
		SomeService service = (SomeService) factory.createProxyIntance(new SomeServiceImpl("xxx"));
		service.save("888");
	}
	
}


分享到:
评论

相关推荐

    Java中AOP编程实现.rar

    Java中的AOP(Aspect ...通过这些知识点,你可以理解并实现Java中的AOP编程,有效地管理和组织代码,提高软件的模块化程度。在实际项目中,AOP能够帮助你更好地管理横切关注点,让代码更加整洁,更易于测试和维护。

    AOP编程入门 Word版

    【AOP编程入门详解】 面向切面编程(Aspect Oriented Programming,简称AOP)是一种编程范式,旨在解决传统面向对象编程(OOP)中的一些问题,如代码重复、高耦合度等。AOP的核心思想是将关注点分离,即把系统中...

    Spring AOP面向方面编程原理:AOP概念

    随着软件系统的日益复杂,传统的面向对象编程(OOP)逐渐暴露出难以应对某些横切关注点(cross-cutting concerns)的问题。为了解决这一挑战,面向方面编程(AOP)应运而生。Spring框架作为Java开发领域的领头羊之一,提供...

    Spring中aop编程所需要的jar包

    为了在Spring中进行AOP编程,我们需要一些特定的JAR包。以下是对这些关键组件的详细说明: 1. **Spring核心包**: - `spring-core.jar`: 这是Spring框架的基础,包含了IoC(Inversion of Control,控制反转)容器...

    spring AOP切面编程

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...

    AOP编程模式与标准java的应用

    ### AOP编程模式与标准Java的应用 #### AOP的产生背景及意义 面向方面编程(AOP)是一种在上世纪90年代由施乐公司的帕洛阿尔托研究中心(Xerox PARC)发明的编程范式。它的核心思想在于将程序中原本紧密耦合的功能...

    AOP面向切面编程总结

    ### AOP面向切面编程详解 #### 一、AOP概览 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,它作为OOP(面向对象编程)的一种补充,主要解决了OOP在处理横切关注点方面的不足。在传统的...

    面向切面编程aop简介

    Spring AOP 是一种面向切面的编程实现,它是Spring框架的核心功能之一,用来解决传统面向对象编程(OOP)中难以管理的横切关注点问题。在Spring中,AOP主要通过代理机制实现,允许开发者将关注点分离,将通用的辅助...

    进击的编程思想!带你学Spring AOP核心编程思想教程 新角度学面向切面编程

    AOP 采取横向抽取机制,取代了传统纵向继承体系的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。 目前最流行的 AOP 框架有两个,分别为 Spring AOP 和 AspectJ。Spring AOP 使用纯 ...

    百知教育 — Spring系列课程 — AOP编程1

    在本课程“百知教育 — Spring系列课程 — AOP编程1”中,主要探讨的是Spring框架中的面向切面编程(AOP)概念及其应用。面向切面编程是Java EE开发中一个重要的技术,它允许开发者将关注点分离,将横切关注点(如...

    Spring AOP面向方面编程原理Spring AOP面向方面编程原理

    传统的面向对象编程(OOP)往往难以处理这些跨多个模块的功能,如事务管理、日志记录、安全控制等。而AOP通过提供一种机制,允许开发者在不修改业务代码的情况下添加这些功能。 #### 二、AOP的核心概念 1. **切面...

    面向切面 aop

    在传统的面向对象编程(OOP)中,业务逻辑往往与日志、事务管理、权限控制等横切关注点交织在一起,导致代码冗余和耦合度提高。AOP则通过将这些关注点抽取到单独的“切面”中,实现了代码的解耦。 AOP的核心概念...

    Spring中IOC(反转控 制) 和 AOP(面向方面编程)

    在Java世界里,Spring框架是应用最广泛的轻量级框架之一,它的核心特性包括IOC(Inversion of Control,反转控制)和AOP(Aspect Oriented Programming,面向方面编程)。这两个概念是Spring框架的灵魂,极大地提升...

    PHP-设计模式: AOP切面编程,DI依赖注入,DIC容器DEMO。简单易懂哦

    在传统的面向对象编程中,我们通常按照功能将代码组织成类和方法,但有时会出现一些与主要业务逻辑关系不大,却需要在多个地方执行的“横切关注点”,如日志记录、权限检查等。AOP就是为了解决这个问题而提出的,它...

    aopalliance-white-paper(AOP Alliance白皮书)

    - **背景**:随着软件系统变得越来越复杂,传统的面向对象编程方式难以很好地解决横切关注点的问题。例如,日志记录、安全控制、事务管理等都是典型的横切关注点,它们贯穿于整个应用程序的多个部分。为了解决这些...

    spring-aop标签和配置文件两种方式实例

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员定义横切关注点,如日志、事务管理、权限检查等,这些关注点可以被模块化为可重用的切面,避免了传统编程中的大量重复代码。本实例将探讨如何在...

    spring aop注解方式代码

    下面将详细探讨如何在Spring中通过注解方式进行AOP编程。 首先,我们要确保引入了Spring框架的基础开发包,这通常包括`spring-context`、`spring-beans`、`spring-core`等核心模块,这些模块提供了IoC(控制反转)...

    AOP及其Java实现机制.doc

    AspectJ提供了一个完整的AOP编程模型,允许开发者使用面向方面的编程语言编写横切关注点。AspectJ支持在编译时或运行时进行织入,使得开发者可以根据具体需求选择最适合的方式。 - **声明式AOP**:AspectJ通过注解...

    springAop的配置实现

    在传统的面向对象编程中,业务逻辑与日志记录、事务管理、性能监控等横切关注点混合在一起,而AOP则是为了解决这一问题而诞生的编程范式。 **1. Spring AOP 基础概念** - **切面(Aspect)**:切面是关注点的模块化...

Global site tag (gtag.js) - Google Analytics