`
haiwoo
  • 浏览: 12330 次
  • 来自: ...
社区版块
存档分类
最新评论

AOP(observable) aop的轮子,访问者结合代理模式的应用

阅读更多

在Web系统中,经常用到session,然后再session的添加及修改都可以通过实现HttpSessionListener 进行对session的管理,至于对session在哪里sessionCreated后怎么样不管理,不关心的,而HttpSessionListener 同样也不知道session是在哪里或怎么样getAttribute,setAttribute,这种模式可以说访问者模式(观察者模式)的应用,现在我们也会出现一些业务要求,即某业务Action进行doAction的时候,能够触发另一个ListenerAction的doAction方法,那么解决这类业务的时候,我们通常使用spring的Aop进行拦截,before跟after,并且还要配置很多的东西,至于怎么配置怎么使用这里就不具体讲解了,但我们常常会遇到这样,当一个Action有10个的doaction及Listenner的时候,配置是很麻烦,因此为了减少配置,个人就搭建了一个observable的访问者模式,即采用这种模式来解决特定的业务,当某个业务采用或者通过observer实现的对象或类,都回触发所有的ListenerAction,不需要任何的配置下,相对Action来说就像HttpSession一样使用,而ListenerAction就像HttpSessionListener ,而Action所必须实现observer接口,通常使用格式:ActionInterface extends observer;其中ActionInterface 可以不实现任何方法,而ListenerActionIntaface extends observable,然后其中observable有before方法及after,或者自己定义的方法等,其中动态方法是通过CGLIB实现的,具体的demo如下

 

import org.observable.Observer;

 

public interface MyObserver extends Observer{
 
 public void test();
}

 


import org.observable.ObserverAnnotion;
import org.observable.ObserverBeforeAnnotion;
import org.observable.impl.ObserverImpl;


/**
 * 怎么样跟spring 结合
 * @author chen
 *
 */
public class MyAction extends ObserverImpl implements MyObserver {

 
 /**
  * @param args
  */
 public static void main(String[] args) {
 
  // TODO Auto-generated method stub

//  MyAction action =(MyAction)getObserver(MyAction.class);
  
//  Observer action =(Observer)getObserver(new MyAction());
  MyObserver action =(MyObserver)getObserver(new MyAction());
//  if(action instanceof ObserverImpl) System.out.println("==");
//  else System.out.println(action.getClass().getName());
//  Observer action =new Observer();
  ActionObservable actionObservable=new ActionObservable();
  action.addObserverTarget(actionObservable);
  action.test(); 
  
 }

 @ObserverBeforeAnnotion(before=true,only=true)
 @ObserverAnnotion(before=true,after=false,defaultOnly=true,defaults=false)
 public void test(){
  System.out.println("observe test");  
 }


}

 

import org.observable.Observable;
import org.observable.impl.ObserverImpl;


public class ActionObservable implements Observable {

 @Override
 public void afterAction(Observable observable, ObserverImpl observer) {
  // TODO Auto-generated method stub
  System.out.println("I am a after observable ...");
 }

 @Override
 public void beforeAction(Observable observable, ObserverImpl observer) {
  // TODO Auto-generated method stub
  System.out.println("I am a observable ...");
 }

 @Override
 public void defaultAction(Observable observable, ObserverImpl observer) {
  // TODO Auto-generated method stub
  
 }

 
}

//=========================

最近郁闷,就简单写了一下,没有具体,感兴趣的人可以跟我讨论一下 ,谢谢

0
0
分享到:
评论

相关推荐

    反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    这种通过代理模式实现的AOP方法,可以很好地将业务逻辑代码与额外的横切关注点分离,使得代码更加清晰,易于维护。如果将来需要去除日志记录功能,只需要替换掉代理类的实例,而不需要修改任何业务逻辑代码。此外,...

    (入门)什么是AOP?什么是代理模式?怎么设计日志拦截器?

    代理模式是一种设计模式,它为一个对象提供一个代理以控制对这个对象的访问。在AOP中,代理模式起着关键作用。主要有两种类型的代理:静态代理和动态代理。静态代理是在编译时就已经确定了代理类,而动态代理则是在...

    java Spring代理模式AOP-IOC结合

    Java Spring 代理模式 AOP-IOC 结合 从给定的文件信息中,我们可以总结出以下知识点: 一、为什么需要代理模式 在软件开发中,我们经常会遇到一些非功能性需求,如日志记录、身份验证、性能监控等,这些需求会...

    AOP动态代理(反射机制)

    4. **应用场景**:AOP动态代理常用于框架开发,例如Spring AOP。Spring AOP提供了基于代理的实现,可以在不修改原始代码的情况下,为业务方法添加额外的功能。此外,它还支持基于注解的切面定义,使得AOP的使用更加...

    spring之AOP(动态代理)

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。AOP的核心概念是切面、通知、连接点、切入点和织入。在...

    Java Spring代理模式AOP-IOC分析

    Java Spring代理模式AOP-IOC分析 一、代理模式概述 在软件设计中,代理模式是一种常用的设计模式。它可以在不修改原始代码的情况下,扩展或修改原始对象的行为。代理模式可以分为静态代理和动态代理两种。静态代理...

    反射实现 AOP 动态代理模式(Spring AOP 的实现 原理) - Java 例子 -

    本文将深入探讨Spring AOP的实现原理,以及如何使用反射来实现动态代理模式。 首先,我们需要了解AOP的基本概念。AOP的核心思想是切面,它包含两个主要部分:切点(Pointcut)和通知(Advice)。切点定义了在程序...

    死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序.pdf

    在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态代理。 JDK 动态代理是基于接口的,它要求被代理的目标对象必须实现至少一个接口。Spring 使用 `java.lang.reflect.Proxy`...

    Spring AOP应用Demo

    3. **代理模式**:Spring AOP使用JDK动态代理或CGLIB生成代理对象,以便在调用目标方法前后插入通知代码。 4. **配置AOP**:在Spring的配置文件(如`applicationContext.xml`)中启用AOP并注册切面,或者在Java配置...

    代理模式(含动态代理讲解)【Spring AOP实质】

    代理模式是一种设计模式,它允许我们为一个对象创建一个代理对象,这个代理对象在客户端和目标对象之间起到中介的作用,可以增强或控制对目标对象的访问。代理模式在实际开发中有着广泛的应用,特别是在需要进行额外...

    第四章:Spring AOP API 设计模式1

    13. **观察者模式(Observer)**:Spring AOP并没有直接实现观察者模式,但在Spring事件模型中,`ApplicationEventPublisher`和`ApplicationListener`接口体现了观察者模式,允许对象注册监听并响应特定事件。...

    代理模式,JDK动态代理,SpringAOP来龙去脉

    在Java中,我们可以使用JDK的动态代理或者Spring AOP来实现代理模式。 JDK动态代理主要依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。Proxy类是生成代理对象的工厂,而...

    代理设计模式:静态代理和动态代理的理解、实现与区别(优缺点)与SpringAOP的3种配置方式案例工程代码

    本资源主要涵盖了静态代理和动态代理两种常见类型的代理模式,以及Spring AOP中动态代理的三种配置方式。以下是详细的知识点解析: ### 静态代理 静态代理是程序员手动创建代理类并实现相同接口的方式。代理类和...

    spring 应用aop 实例

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从核心业务逻辑中分离出来,比如日志记录、事务管理、权限控制等。本实例将深入探讨如何在Spring 4.0版本中实现AOP。 首先,AOP的...

    设计模式之动态代理与spring的aop编程

    本文将深入探讨这两个概念,并结合实际应用进行解析。 首先,让我们理解什么是动态代理。动态代理是一种在运行时创建对象的机制,它允许我们在不修改原对象代码的情况下,为对象增加额外的功能或行为。在Java中,...

    springAop默认代理方式.zip

    4. **代理模式的创建**:Spring AOP 使用`org.springframework.aop.framework.ProxyFactoryBean`或`@EnableAspectJAutoProxy`注解来配置代理。`ProxyFactoryBean`是XML配置方式,而`@EnableAspectJAutoProxy`是基于...

    SpringAOP之探秘(动态代理、责任链模式、注解使用)

    本篇文章将深入探讨Spring AOP中的动态代理、责任链模式以及注解的使用。 首先,动态代理是实现AOP的关键技术之一。在Java中,有两种主要的动态代理实现方式:JDK动态代理和CGLIB。JDK动态代理基于接口,当目标类...

    解释Spring中的Aop代理

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员在不修改源代码的情况下,向应用程序添加跨切面的关注点,如日志、事务管理、权限检查等。AOP代理是实现这一功能的关键机制。下面将详细解释...

Global site tag (gtag.js) - Google Analytics