观察者模式+AOP 代码示例
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,背景当经纪人创建客户时,需要给对应的经纪人增加战报信息。在代码层面上,客源的相关类只针对客源数据表操作。而战报信息包含了多种业务统计数据,客源只是其中统计的部分数据。鉴于两者相对独立,且客源的战报信息
千家信息网最后更新 2026年11月03日观察者模式+AOP 代码示例
背景
当经纪人创建客户时,需要给对应的经纪人增加战报信息。在代码层面上,客源的相关类只针对客源数据表操作。而战报信息包含了多种业务统计数据,客源只是其中统计的部分数据。鉴于两者相对独立,且客源的战报信息会有所修改。因此,采用AOP+观察者模式构建代码。
代码
定义一个注解,用于AOP拦截。
/** * 战报注解 */@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD, ElementType.PARAMETER})@Documentedpublic @interface AchievementAnnotation { OperateEnum operate() default OperateEnum.ADD; enum OperateEnum{ ADD,UPDATE,DELETE }}定义AOP,用户获取数据,并转发给观察者
/** * 战报AOP */@Aspect@Componentpublic class AchievementAop { /** * 战报观察者列表 */ private List observerList; public AchievementAop() { this.observerList = new ArrayList<>(); } public List getObserverList() { return observerList; } public void setObserverList(List observerList) { if (null != this.observerList) this.observerList.addAll(observerList); this.observerList = observerList; } /** *注入客源的观察者 */ @Autowired public void setCustomerAchievementObserver(CustomerAchievementObserver customerAchievementObserver) { getObserverList().add(customerAchievementObserver); } @Pointcut("@annotation(com.pretang.cloud.aop.AchievementAnnotation)") private void pointCut() { } @AfterReturning(pointcut = "pointCut()", returning = "retVal") public void after(JoinPoint joinPoint, Object retVal) { Signature signature = joinPoint.getSignature(); MethodSignature methodSignature = (MethodSignature) signature; Method targetMethod = methodSignature.getMethod(); AchievementAnnotation annotation = targetMethod.getAnnotation(AchievementAnnotation.class); AchievementAnnotation.OperateEnum operateEnum = annotation.operate(); for (AchievementObserver observer : observerList) { if (observer.isSupport(retVal)) observer.execute(retVal); } }} 定义观察者通用接口
/** * 战报信息观察者接口 * @param */public interface AchievementObserver { /** * 是否支持该对象 * @param obj * @return */ boolean isSupport(Object obj); /** * 操作业务数据 * @param t * @throws RuntimeException */ void execute(T t) throws RuntimeException;} 客源观察者
/** * 客源信息的观察者 */@Componentpublic class CustomerAchievementObserver implements AchievementObserver { @Autowired private CustomerRpcService customerRpcService; @Override public boolean isSupport(Object obj) { return obj instanceof CustomerBase; } @Override public void execute(CustomerBase customerBase) throws RuntimeException { // 实际业务处理 customerRpcService.saveAchievement(customerBase.getAgentUserId(), "ADD_CUSTOMER", customerBase.getId()); }}
观察者
观察
客源
战报
数据
信息
代码
业务
接口
注解
经纪人
经纪
统计
模式
只是
多种
实际
客户
对象
层面
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
什么是科技互联网
深圳九邦互联网科技有限公司
美国互联网科技
迪茉互联网科技
宜安科技 互联网金融
广西互联网科技公司
上海卓越科技 互联网
华中科技有哪些互联网大佬
阿里巴巴算科技企业还是互联网
互联网教育科技公司vipkid
工业互联网山东科技大学
互联网相关科技技术
郑州欣桑互联网科技有限公司
中国新注册互联网科技
陕西九四连强互联网科技有限公司
美国五大互联网科技公司市值多少
互联网科技大会大佬
青岛互联网科技园
科技美学互联网 艺术
颐高云石互联网科技
工业互联网科技新基建
未来的互联网科技
互联网科技有限公司 翻译
哈尔滨秒房互联网科技有限公司
安控科技rtu产品工业互联网
新兴科技互联网创新大赛颁奖典礼
中国科技创新与世界互联网大会
互联网金融科技公司的优势
国产互联网科技公司
互联网科技平台产品运营