实现目的:
其他任何项目想使用多级缓存功能时,只需要导入这个启动项目即可
实现步骤:
1. 导入jar包
1.1) 父模块中导入
<dependencyManagement>
<dependencies>
<!--在此处添加Spring Boot自身的自动配置最为依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>${spring.boot.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
1.2)在启动字模块中添加
<dependencies>
<dependency>
<groupId>org.github.roger</groupId>
<artifactId>multi-layering-cache-aspecj</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
</dependencies>
2.多级缓存自动配置类
package com.github.roger.cache.config;
import com.github.roger.aspect.MultiLayeringCacheAspect;
import com.github.roger.cache.properties.MultiLayeringCacheProperties;
import org.github.roger.MultiLayeringCache;
import org.github.roger.MultiLayeringCacheManager;
import org.github.roger.manager.ICacheManager;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.data.redis.core.RedisTemplate;
@Configuration
//仅仅在当前上下文中存在Xxxx对象时,才会实例化一个Bean
//也就是 只有当RedisTemplate.class 在spring的applicationContext中存在时 这个当前的bean才能够创建
@ConditionalOnBean(RedisTemplate.class)
@AutoConfigureAfter({RedisAutoConfiguration.class})
@EnableAspectJAutoProxy
@EnableConfigurationProperties({MultiLayeringCacheProperties.class})
public class MultiLayeringCacheAutoConfig {
@Bean
//如果项目中自己定义了ICacheManager实例,则这个实例不必创建
@ConditionalOnMissingBean(ICacheManager.class)
public ICacheManager cacheManager(RedisTemplate<String, Object> redisTemplate) {
MultiLayeringCacheManager layeringCacheManager = new MultiLayeringCacheManager(redisTemplate);
return layeringCacheManager;
}
@Bean//把切面交给Spring 容器管理
public MultiLayeringCacheAspect layeringCacheAspect(){
return new MultiLayeringCacheAspect();
}
}
3.在resources目录下创建文件夹 META-INF ,在 META-INF 文件夹下创建文件 spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.github.roger.cache.config.MultiLayeringCacheAutoConfig