@Cacheable @Primary
时间: 2023-09-26 10:10:54 浏览: 94
`@Cacheable` 和 `@Primary` 是 Spring 框架中的注解。
- `@Cacheable` 是一个注解,用于标记一个方法的返回值应该被缓存。当方法被调用时,Spring 会先检查缓存中是否存在对应的结果,如果存在则直接返回缓存的结果,而不执行方法体。如果缓存中不存在对应的结果,则执行方法体,并将结果存入缓存中供后续使用。`@Cacheable` 注解可以指定缓存的名称、缓存的键等参数来进一步配置缓存行为。
- `@Primary` 是一个注解,用于标记一个 Bean 定义为首选的 Bean。当存在多个类型相同的 Bean 定义时,如果其中有一个 Bean 被标记为 `@Primary`,则它会被优先选择作为依赖注入的对象。
请注意,以上是对这两个注解的一般性解释,具体使用方式和效果可能需要根据实际情况进行调整和理解。
相关问题
根据CREATE TABLE `tb_dic` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id', `name` varchar(255) DEFAULT NULL COMMENT '数据项名称', `other_name1` varchar(255) DEFAULT NULL COMMENT '数据项别名1', `other_name2` varchar(255) DEFAULT NULL COMMENT '数据项别名2', `detail` varchar(255) DEFAULT NULL COMMENT '详细描述', `type_id` int(11) DEFAULT NULL COMMENT '类别id', `order` varchar(255) DEFAULT NULL COMMENT '排序', `valid` int(11) DEFAULT NULL COMMENT '是否有效', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='字典表';CREATE TABLE `tb_dic_type` ( `id` int(11) NOT NULL AUTO_INCREMENT, `type_name` varchar(255) DEFAULT NULL COMMENT '字典类型名称', `type_detail` varchar(255) DEFAULT NULL COMMENT '字典类型描述', `edit` varchar(255) DEFAULT NULL COMMENT '是否可编辑1是0否', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='字典类型表'; 基于Springboot 生成 字典缓存代码
以下是一个基于Springboot生成字典缓存的示例代码:
```
@Service
public class DictionaryService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private CacheManager cacheManager;
@Cacheable(value = "dictionaryCache", keyGenerator = "cacheKeyGenerator")
public Map<String, Map<String, String>> getDictionary() {
Map<String, Map<String, String>> dictionary = new HashMap<>();
// 查询字典类型列表
List<Map<String, Object>> types = jdbcTemplate.queryForList("SELECT * FROM tb_dic_type WHERE valid = 1");
for (Map<String, Object> type : types) {
int typeId = (int) type.get("id");
String typeName = (String) type.get("type_name");
// 查询字典项列表
List<Map<String, Object>> items = jdbcTemplate.queryForList("SELECT * FROM tb_dic WHERE type_id = ? AND valid = 1 ORDER BY `order`", typeId);
Map<String, String> itemMap = new LinkedHashMap<>();
for (Map<String, Object> item : items) {
String itemName = (String) item.get("name");
String detail = (String) item.get("detail");
itemMap.put(itemName, detail);
}
dictionary.put(typeName, itemMap);
}
return dictionary;
}
@CacheEvict(value = "dictionaryCache", allEntries = true)
public void clearCache() {
}
}
```
这个示例代码中,我们使用了Springboot的缓存注解,通过@Cacheable注解将getDictionary方法进行了缓存配置,并指定了缓存名称为dictionaryCache。同时,我们还在该注解中指定了一个keyGenerator,用于生成缓存的key。这里我们使用了一个自定义的keyGenerator,用于生成符合我们需求的缓存key。
在getDictionary方法中,我们先查询字典类型列表,然后遍历每个字典类型,查询该字典类型下的字典项列表,并将字典项信息存放到一个Map中。最后,我们将这个字典信息的Map存放到另一个Map中,以字典类型名称为key,字典项信息的Map为value。
在clearCache方法中,我们使用了@CacheEvict注解,用于清空dictionaryCache缓存。当我们在数据库中修改了字典信息时,调用该方法就可以清空缓存,让下一次调用getDictionary方法时重新加载最新的字典信息。
阅读全文