org.springmodules.cache.config.CacheProxyFactoryBeanParser.java Source code

Java tutorial

Introduction

Here is the source code for org.springmodules.cache.config.CacheProxyFactoryBeanParser.java

Source

/* 
 * Created on Feb 19, 2006
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 *
 * Copyright @2006 the original author or authors.
 */
package org.springmodules.cache.config;

import org.w3c.dom.Element;

import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.ParserContext;

import org.springmodules.cache.interceptor.proxy.CacheProxyFactoryBean;

/**
 * <p>
 * Template that handles the parsing of the XML tag "proxy". Creates, configures
 * and registers and implementation of
 * <code>{@link CacheProxyFactoryBean}</code> in the provided registry of bean
 * definitions.
 * </p>
 * 
 * @author Alex Ruiz
 */
public final class CacheProxyFactoryBeanParser extends AbstractCacheSetupStrategyParser {

    private static final String CACHE_MODEL_KEY = "methodName";

    /**
     * @see AbstractCacheSetupStrategyParser#getCacheModelKey()
     */
    protected String getCacheModelKey() {
        return CACHE_MODEL_KEY;
    }

    /**
     * Creates and registers a <code>{@link CacheProxyFactoryBean}</code> by
     * parsing the given XML element.
     * 
     * @param element
     *          the XML element to parse
     * @param parserContext
     *          the registry of bean definitions
     * @param propertySource
     *          contains common properties for the different cache setup
     *          strategies
     * @throws IllegalStateException
     *           if the "proxy" tag does not contain any reference to an existing
     *           bean or if it does not contain a bean definition
     * 
     * @see AbstractCacheSetupStrategyParser#parseCacheSetupStrategy(Element,
     *      ParserContext, CacheSetupStrategyPropertySource)
     */
    protected void parseCacheSetupStrategy(Element element, ParserContext parserContext,
            CacheSetupStrategyPropertySource propertySource) {

        Object target = getBeanReferenceParser().parse(element, parserContext);

        RootBeanDefinition cacheProxyFactoryBean = new RootBeanDefinition(CacheProxyFactoryBean.class,
                propertySource.getAllProperties());

        cacheProxyFactoryBean.getPropertyValues().addPropertyValue("target", target);

        String id = element.getAttribute("id");
        BeanDefinitionRegistry registry = parserContext.getRegistry();
        registry.registerBeanDefinition(id, cacheProxyFactoryBean);
    }
}