一直也没明白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(Aspect ...通过这些知识点,你可以理解并实现Java中的AOP编程,有效地管理和组织代码,提高软件的模块化程度。在实际项目中,AOP能够帮助你更好地管理横切关注点,让代码更加整洁,更易于测试和维护。
【AOP编程入门详解】 面向切面编程(Aspect Oriented Programming,简称AOP)是一种编程范式,旨在解决传统面向对象编程(OOP)中的一些问题,如代码重复、高耦合度等。AOP的核心思想是将关注点分离,即把系统中...
随着软件系统的日益复杂,传统的面向对象编程(OOP)逐渐暴露出难以应对某些横切关注点(cross-cutting concerns)的问题。为了解决这一挑战,面向方面编程(AOP)应运而生。Spring框架作为Java开发领域的领头羊之一,提供...
为了在Spring中进行AOP编程,我们需要一些特定的JAR包。以下是对这些关键组件的详细说明: 1. **Spring核心包**: - `spring-core.jar`: 这是Spring框架的基础,包含了IoC(Inversion of Control,控制反转)容器...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...
### AOP编程模式与标准Java的应用 #### AOP的产生背景及意义 面向方面编程(AOP)是一种在上世纪90年代由施乐公司的帕洛阿尔托研究中心(Xerox PARC)发明的编程范式。它的核心思想在于将程序中原本紧密耦合的功能...
### AOP面向切面编程详解 #### 一、AOP概览 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,它作为OOP(面向对象编程)的一种补充,主要解决了OOP在处理横切关注点方面的不足。在传统的...
Spring AOP 是一种面向切面的编程实现,它是Spring框架的核心功能之一,用来解决传统面向对象编程(OOP)中难以管理的横切关注点问题。在Spring中,AOP主要通过代理机制实现,允许开发者将关注点分离,将通用的辅助...
AOP 采取横向抽取机制,取代了传统纵向继承体系的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。 目前最流行的 AOP 框架有两个,分别为 Spring AOP 和 AspectJ。Spring AOP 使用纯 ...
在本课程“百知教育 — Spring系列课程 — AOP编程1”中,主要探讨的是Spring框架中的面向切面编程(AOP)概念及其应用。面向切面编程是Java EE开发中一个重要的技术,它允许开发者将关注点分离,将横切关注点(如...
传统的面向对象编程(OOP)往往难以处理这些跨多个模块的功能,如事务管理、日志记录、安全控制等。而AOP通过提供一种机制,允许开发者在不修改业务代码的情况下添加这些功能。 #### 二、AOP的核心概念 1. **切面...
在传统的面向对象编程(OOP)中,业务逻辑往往与日志、事务管理、权限控制等横切关注点交织在一起,导致代码冗余和耦合度提高。AOP则通过将这些关注点抽取到单独的“切面”中,实现了代码的解耦。 AOP的核心概念...
在Java世界里,Spring框架是应用最广泛的轻量级框架之一,它的核心特性包括IOC(Inversion of Control,反转控制)和AOP(Aspect Oriented Programming,面向方面编程)。这两个概念是Spring框架的灵魂,极大地提升...
在传统的面向对象编程中,我们通常按照功能将代码组织成类和方法,但有时会出现一些与主要业务逻辑关系不大,却需要在多个地方执行的“横切关注点”,如日志记录、权限检查等。AOP就是为了解决这个问题而提出的,它...
- **背景**:随着软件系统变得越来越复杂,传统的面向对象编程方式难以很好地解决横切关注点的问题。例如,日志记录、安全控制、事务管理等都是典型的横切关注点,它们贯穿于整个应用程序的多个部分。为了解决这些...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员定义横切关注点,如日志、事务管理、权限检查等,这些关注点可以被模块化为可重用的切面,避免了传统编程中的大量重复代码。本实例将探讨如何在...
下面将详细探讨如何在Spring中通过注解方式进行AOP编程。 首先,我们要确保引入了Spring框架的基础开发包,这通常包括`spring-context`、`spring-beans`、`spring-core`等核心模块,这些模块提供了IoC(控制反转)...
AspectJ提供了一个完整的AOP编程模型,允许开发者使用面向方面的编程语言编写横切关注点。AspectJ支持在编译时或运行时进行织入,使得开发者可以根据具体需求选择最适合的方式。 - **声明式AOP**:AspectJ通过注解...
在传统的面向对象编程中,业务逻辑与日志记录、事务管理、性能监控等横切关注点混合在一起,而AOP则是为了解决这一问题而诞生的编程范式。 **1. Spring AOP 基础概念** - **切面(Aspect)**:切面是关注点的模块化...