如何优雅的使用装饰物器模式
来源:动力 2023年04月17日 12:15
vate INodeScopeService nodeScopeService; @Override public Set deptFindAllChildrenByParentIds(Collection parentIds) { Set result = new HashSet<>(); departmentService.departmentChildren(parentIds, result); return result; } @Override public Set deptFindScopeById(Long userId) { return nodeScopeService.deptFindScopeById(userId); }}
武汉看男科去哪个医院好
长春生殖感染医院哪个好
复方鱼腥草合剂治疗喉咙痛效果怎么样
金笛复方鱼腥草合剂的功效与作用
接下来就是对之前的字符进行时装饰性,判别一个装饰性机的做到类
(这个类并未 @Component, 并未实际上交给spring管理;沙了原文都会报错:找出了2个bean)
public class DataAccessorDecorator implements IDataAccessor { private final IDataAccessor iDataAccessor; public DataAccessorDecorator(IDataAccessor iDataAccessor) { this.iDataAccessor = iDataAccessor; } @Cacheable(cacheNames = "dept:parentId", key = "#p0", sync = true) @Override public Set deptFindAllChildrenByParentIds(Collection parentIds) { return iDataAccessor.deptFindAllChildrenByParentIds(parentIds); } @Cacheable(cacheNames = "dept:scope:userId", key = "#p0", sync = true) @Override public Set deptFindScopeById(Long userId) { return iDataAccessor.deptFindScopeById(nodeId,userId); }}接下来还必需将这个装饰性机的类登记注册到spring当中
@Configuration@ConditionalOnBean({IDataAccessor.class})public class Config { @Bean @ConditionalOnBean({IDataAccessor.class}) public DataAccessorDecorator dataAccessorDecorator(IDataAccessor iDataAccessor) { return new DataAccessorDecorator(iDataAccessor); }}根据业务,维护堆栈更新;这里用于的窃听主管和职员的暂定惨案
@Componentpublic class DataScopeEvict { /** * 移走主管系统对性堆栈 */ @CacheEvict(cacheNames = {"dept:parentId"}, allEntries = true) public void department() { } /** * 移走用户系统对性堆栈 */ @CacheEvict(cacheNames = {"dept:scope:userId"}, allEntries = true) public void user() { }}@Componentpublic class ScopeDataEventListener { @Autowired private DataScopeEvict evict; /** * 窃听主管暂定惨案 */ @EventListener public void departmentEvent(DepartmentChangeEvent event) { // 1 增沙 2 撤下 3 上级主管暂定 evict.department(); } /** * 窃听user暂定惨案 */ @EventListener public void userEvent(UserChangeEvent event) { // 2 撤下 3 主主管暂定 if (event.getType().equals(2) || event.getType().equals(3)) { evict.user(); } }}一切准备就绪,用于的时候实际上用于装饰性机类就好了
@Servicepublic class UserService { @Autowired DataAccessorDecorator scopeDataAccessor; public Set deptFindAllChildrenByParentIds(Collection parentIds) { return scopeDataAccessor.deptFindAllChildrenByParentIds(parentIds); } public Set deptFindScopeById(Long userId) { return scopeDataAccessor.deptFindScopeById(userId); } }以上就是一个将装饰性机方式上应用到实际项目的例子;
在这个例子当中,用于装饰性机方式上大幅提高了原本的字符,不变更原本的字符,原本的字符也能正确备有增值,只不过并未用于堆栈;只要方法名命名一致,必需变更注入的字符串就可以升级进行时,升级成本高还是很低的。
这波用于装饰性机方式上沙堆栈的操作方法读到到项目当中,实际上让你的字符 B ge pull full
小结虽然用于装饰性机方式上样子B格高,但还是要留意自己项目的布景,为了让适合的方式解决情况。
。成都风湿去哪看武汉看男科去哪个医院好
长春生殖感染医院哪个好
复方鱼腥草合剂治疗喉咙痛效果怎么样
金笛复方鱼腥草合剂的功效与作用
相关阅读
-
为什么住宅的转让是70年,转让到期了怎么办?
在阅读此文前,诚邀您点击一下“关注”,既便利您同步进行讨论与分享,又给您助长不一样的参与感,感谢您的支持。 随着我们第三世界的发展,我们老百姓显然会感受到自己的与世隔绝却只有一些很