All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fun.fengwk.convention4j.springboot.starter.cache.CacheSupportAutoConfiguration Maven / Gradle / Ivy

The newest version!
package fun.fengwk.convention4j.springboot.starter.cache;

import fun.fengwk.convention4j.common.cache.facade.CacheFacade;
import fun.fengwk.convention4j.common.cache.facade.StringRedisTemplateCacheFacade;
import fun.fengwk.convention4j.common.cache.facade.TransactionCacheFacade;
import fun.fengwk.convention4j.common.cache.metrics.CacheFacadeMetrics;
import fun.fengwk.convention4j.common.cache.metrics.CacheManagerMetrics;
import fun.fengwk.convention4j.common.cache.metrics.LogCacheManagerMetrics;
import fun.fengwk.convention4j.springboot.starter.cache.registry.DefaultCacheManagerRegistry;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurationSelector;

/**
 * @author fengwk
 */
@ConditionalOnClass({ RedisOperations.class, TransactionManagementConfigurationSelector.class })
@EnableTransactionManagement
@EnableAspectJAutoProxy
@AutoConfigureAfter(RedisAutoConfiguration.class)
@Configuration
public class CacheSupportAutoConfiguration {

    @ConditionalOnBean(StringRedisTemplate.class)
    @ConditionalOnMissingBean(CacheFacade.class)
    @Bean
    public CacheFacade cacheFacade(StringRedisTemplate redisTemplate) {
        return new StringRedisTemplateCacheFacade(redisTemplate);
    }

    @ConditionalOnBean(CacheFacade.class)
    @Bean
    public CacheFacadeMetrics cacheFacadeMetrics(@Qualifier("cacheFacade") CacheFacade cacheFacade) {
        return new CacheFacadeMetrics(cacheFacade);
    }

    @ConditionalOnBean(CacheFacadeMetrics.class)
    @Bean
    public TransactionCacheFacade transactionCacheFacade(CacheFacadeMetrics cacheFacadeMetrics) {
        return new TransactionCacheFacade(cacheFacadeMetrics);
    }

    @ConditionalOnBean(CacheFacade.class)
    @ConditionalOnMissingBean(CacheManagerMetrics.class)
    @Bean
    public CacheManagerMetrics cacheManagerMetrics() {
        return new LogCacheManagerMetrics();
    }

    @ConditionalOnBean({ CacheFacade.class, CacheManagerMetrics.class })
    @Bean
    public DefaultCacheManagerRegistry defaultCacheManagerRegistry(BeanFactory beanFactory,
        @Qualifier("transactionCacheFacade") CacheFacade cacheFacade, CacheManagerMetrics cacheManagerMetrics) {
        return new DefaultCacheManagerRegistry(beanFactory, cacheFacade, cacheManagerMetrics);
    }

    @ConditionalOnBean(DefaultCacheManagerRegistry.class)
    @Bean
    public CacheSupportMethodInterceptor cacheSupportMethodInterceptor(
        DefaultCacheManagerRegistry defaultCacheManagerRegistry) {
        return new CacheSupportMethodInterceptor(defaultCacheManagerRegistry);
    }

    @ConditionalOnBean(CacheSupportMethodInterceptor.class)
    @Bean
    public DefaultPointcutAdvisor cacheSupportPointcutAdvisor(
        CacheSupportMethodInterceptor cacheSupportMethodInterceptor){
        DefaultPointcutAdvisor cacheSupportPointcutAdvisor = new DefaultPointcutAdvisor();
        cacheSupportPointcutAdvisor.setPointcut(new CacheSupportPointcut());
        cacheSupportPointcutAdvisor.setAdvice(cacheSupportMethodInterceptor);
        return cacheSupportPointcutAdvisor;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy