在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
}
}
//=========================
最近郁闷,就简单写了一下,没有具体,感兴趣的人可以跟我讨论一下 ,谢谢
分享到:
相关推荐
这种通过代理模式实现的AOP方法,可以很好地将业务逻辑代码与额外的横切关注点分离,使得代码更加清晰,易于维护。如果将来需要去除日志记录功能,只需要替换掉代理类的实例,而不需要修改任何业务逻辑代码。此外,...
代理模式是一种设计模式,它为一个对象提供一个代理以控制对这个对象的访问。在AOP中,代理模式起着关键作用。主要有两种类型的代理:静态代理和动态代理。静态代理是在编译时就已经确定了代理类,而动态代理则是在...
Java Spring 代理模式 AOP-IOC 结合 从给定的文件信息中,我们可以总结出以下知识点: 一、为什么需要代理模式 在软件开发中,我们经常会遇到一些非功能性需求,如日志记录、身份验证、性能监控等,这些需求会...
4. **应用场景**:AOP动态代理常用于框架开发,例如Spring AOP。Spring AOP提供了基于代理的实现,可以在不修改原始代码的情况下,为业务方法添加额外的功能。此外,它还支持基于注解的切面定义,使得AOP的使用更加...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。AOP的核心概念是切面、通知、连接点、切入点和织入。在...
Java Spring代理模式AOP-IOC分析 一、代理模式概述 在软件设计中,代理模式是一种常用的设计模式。它可以在不修改原始代码的情况下,扩展或修改原始对象的行为。代理模式可以分为静态代理和动态代理两种。静态代理...
本文将深入探讨Spring AOP的实现原理,以及如何使用反射来实现动态代理模式。 首先,我们需要了解AOP的基本概念。AOP的核心思想是切面,它包含两个主要部分:切点(Pointcut)和通知(Advice)。切点定义了在程序...
在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态代理。 JDK 动态代理是基于接口的,它要求被代理的目标对象必须实现至少一个接口。Spring 使用 `java.lang.reflect.Proxy`...
3. **代理模式**:Spring AOP使用JDK动态代理或CGLIB生成代理对象,以便在调用目标方法前后插入通知代码。 4. **配置AOP**:在Spring的配置文件(如`applicationContext.xml`)中启用AOP并注册切面,或者在Java配置...
代理模式是一种设计模式,它允许我们为一个对象创建一个代理对象,这个代理对象在客户端和目标对象之间起到中介的作用,可以增强或控制对目标对象的访问。代理模式在实际开发中有着广泛的应用,特别是在需要进行额外...
13. **观察者模式(Observer)**:Spring AOP并没有直接实现观察者模式,但在Spring事件模型中,`ApplicationEventPublisher`和`ApplicationListener`接口体现了观察者模式,允许对象注册监听并响应特定事件。...
在Java中,我们可以使用JDK的动态代理或者Spring AOP来实现代理模式。 JDK动态代理主要依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。Proxy类是生成代理对象的工厂,而...
本资源主要涵盖了静态代理和动态代理两种常见类型的代理模式,以及Spring AOP中动态代理的三种配置方式。以下是详细的知识点解析: ### 静态代理 静态代理是程序员手动创建代理类并实现相同接口的方式。代理类和...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从核心业务逻辑中分离出来,比如日志记录、事务管理、权限控制等。本实例将深入探讨如何在Spring 4.0版本中实现AOP。 首先,AOP的...
本文将深入探讨这两个概念,并结合实际应用进行解析。 首先,让我们理解什么是动态代理。动态代理是一种在运行时创建对象的机制,它允许我们在不修改原对象代码的情况下,为对象增加额外的功能或行为。在Java中,...
4. **代理模式的创建**:Spring AOP 使用`org.springframework.aop.framework.ProxyFactoryBean`或`@EnableAspectJAutoProxy`注解来配置代理。`ProxyFactoryBean`是XML配置方式,而`@EnableAspectJAutoProxy`是基于...
本篇文章将深入探讨Spring AOP中的动态代理、责任链模式以及注解的使用。 首先,动态代理是实现AOP的关键技术之一。在Java中,有两种主要的动态代理实现方式:JDK动态代理和CGLIB。JDK动态代理基于接口,当目标类...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员在不修改源代码的情况下,向应用程序添加跨切面的关注点,如日志、事务管理、权限检查等。AOP代理是实现这一功能的关键机制。下面将详细解释...