实战1
通过SpringContextAware.getBean(“Bean名称”)方式
需求说明
广告投放中,当用户点击广告的时候,平台(头条,快手等)都会回调给我们监测链接数据(广告创意,广告计划,用户的设备信息androdid,imei,oaid,idfa等),然后我们需要把监测链接的数据保存进表并根据用户的设备信息(androdid,imei,oaid,idfa)缓存起来,但是不同的平台的监测链接的字段是不同的,缓存的方式也可能不同。我们为每个平台都创建了一个service,这些service都同时implements接口ISpreadService接口,又因为每个平台的数据都需要缓存和插入数据库,于是又把这些service同时实现一个抽象类AbastractSpreadService,同时使用泛型T来代表不同平台的Vo。
外层Controller
接口类ISPreadService
抽象类AbastractSpreadService
注意抽象类没有实现接口的class()方法,而是让实现抽象类的子类实现各自的class()方法。
doCache()方法是抽象方法,让实现抽象类的子类自己实现。
平台“今日头条”实现类
抽象类实现接口的原因
1.一般而言,多使用普通类来实现接口,但是普通类实现接口的话就必须实现接口的所有方法,这样容易造成代码冗余。
2.而如果使用抽象类来实现接口,然后再用普通类继承抽象类的话,普通类仍然可以实现接口中但抽象类中并未实现的方法。以此可以只实现必要的方法,即抽象类中可以不定义对于子类而言必要的方法,而最终交由子类自己来实现。
3.抽象类实现接口时,不必实现接口中的所有方法,未实现的方法可以交由子类自己来实现。
实战2
使用SpringContextAware.getBeansOfType(接口类)的方式
需求说明
抖店订单推送中,订单类型有很多,每种类型的处理方式不同。
外层Controller
Service类
实战3
implements ApplicationContextAware接口的方式,ApplicationContextAware的执行时机,涉及Bean的生命周期,详细介绍请查看我的另一篇文章——Spring--Bean相关中生命周期的内容
需求说明
借贷的需求中,用户获取授权code,用户下单成功,用户资金匹配失败,用户资金匹配成功
以上四种类型都通过同一个接口回调,根据请求参数中type字段区分
Controller层
Controller层中的callBack()方法
以上4中回调的签名和验签都是一样的
Service实现ApplicationContextAware接口
策略类
实现类继承策略类
实战4
实现 InitializingBean接口的方式,其中InitializingBean的执行时机,涉及Bean的生命周期,详细介绍请查看我的另一篇文章——Spring--Bean相关中生命周期的内容。
需求跟实战1相同,只是用kotlin重构了一遍
Service实现 InitializingBean接口
实现 InitializingBean接口必须实现afterPropertiesSet方法。
InitializingBean源码
重写afterPropertiesSet()方法