美文网首页
Spring与设计模式

Spring与设计模式

作者: 杰森斯坦sen | 来源:发表于2019-07-25 17:14 被阅读0次

适配器模式

在Spring的Aop中,使用的Advice(通知)来增强被代理类的功能。每个类型Advice都有对应的拦截器,Spring需要将每个Advice都封装成对应的拦截器类型,返回给容器,所以需要使用适配器模式对Advice进行转换(先要注册适配器)。
AdvisorAdapter:

class MethodBeforeAdviceAdapter implements AdvisorAdapter, Serializable {
    MethodBeforeAdviceAdapter() {
    }

    public boolean supportsAdvice(Advice advice) {
        return advice instanceof MethodBeforeAdvice;
    }

    public MethodInterceptor getInterceptor(Advisor advisor) {
        MethodBeforeAdvice advice = (MethodBeforeAdvice)advisor.getAdvice();
        return new MethodBeforeAdviceInterceptor(advice);
    }
}

HandlerAdapter:

public class SimpleControllerHandlerAdapter implements HandlerAdapter {
    public SimpleControllerHandlerAdapter() {
    }

    public boolean supports(Object handler) {
        return handler instanceof Controller;
    }

    public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return ((Controller)handler).handleRequest(request, response);
    }

    public long getLastModified(HttpServletRequest request, Object handler) {
        return handler instanceof LastModified ? ((LastModified)handler).getLastModified(request) : -1L;
    }
}

命令模式

访问者模式

BeanDefinitionVisitor:

public class BeanDefinitionVisitor {
    private StringValueResolver valueResolver;

    public BeanDefinitionVisitor(StringValueResolver valueResolver) {
        Assert.notNull(valueResolver, "StringValueResolver must not be null");
        this.valueResolver = valueResolver;
    }

    public void visitBeanDefinition(BeanDefinition beanDefinition) {
        this.visitParentName(beanDefinition);
        this.visitBeanClassName(beanDefinition);
        this.visitFactoryBeanName(beanDefinition);
        this.visitFactoryMethodName(beanDefinition);
        this.visitScope(beanDefinition);
        this.visitPropertyValues(beanDefinition.getPropertyValues());
        ConstructorArgumentValues cas = beanDefinition.getConstructorArgumentValues();
        this.visitIndexedArgumentValues(cas.getIndexedArgumentValues());
        this.visitGenericArgumentValues(cas.getGenericArgumentValues());
    }
}

Reference

Spring中的设计模式-适配器模式
解析SpringMVC源码中使用到的“适配器”模式
Spring框架中的设计模式(一)

相关文章

网友评论

      本文标题:Spring与设计模式

      本文链接:https://www.haomeiwen.com/subject/baahrctx.html