美文网首页
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