开发过程中的总结 BaseService 为所有的 Controller或Service 提供一个公共获取 Service 的文件,减少重复注入

BaseService 实际的意义

BaseService 也可以起名叫 ServiceUtil 等等这个比较随意,总的来说这个类是用来将一些再不同 Controller 或者 Service 中重复使用 @Autowired 或者 @Resource 注入的属性等只做一次注入,从而减少多个 Controller 或者 Service 中反复注入,可以减少代码量,看起来更整洁,同时只维护一两个基本 service 类,也会轻松许多。

第一种 抽象类方式统一注入,使用 controller 或者 Service 继承该类

具体示例代码如下:

@Service("BaseService")
public abstract class BaseService {
    private static final MyLog logger = new MyLog(BaseService.class);

    protected static final String IDENTITY = "identity";
    
    @Resource(name = "AService")
    protected IAService aService;
    @Resource(name = "CService")
    protected ICService cService;
    @Resource(name = "BService")
    protected IBService bService;
    @Autowired
    protected IRService rService;
    @Autowired
    protected CMappingService cMappingService;
    ........
    ........
    ........
    
// 同时可以提供一些常用的方法进来提供外部controller 使用,只有服务注入也可以

其他 Controller 或者 Service 中如下方式继承,则可以省去重复注入, 为了减少Controller 中的注入,甚至可以直接在不同的 Service 继承,controller 可以完全不使用。
但这种方式通过继承可能会存在并不使用的类也被继承下来,最终并没有使用。这是一种好的方式但是还是存在部分浪费的嫌疑。

@Service("CubeService")
public class CubeService extends BaseService {

// 正常Service 中的业务处理
........................
........................
........................
........................
........................
}

通过Util工具类的方式 直接注入静态的服务类 为 controller 或者 Service 使用

这种方式看起来更好一些,将不同的服务类直接通过 static final 的方式在类内静态声明(需要先从applicationContext中获取),当其成为一个静态属性时,其他的 controller 或者 service 直接通过类名 . 的方式获取对应的单个属性,从而使得精确引用某一个或几个服务,不会造成浪费,但可能写起来看着略长一些。

示例代码如下:

public class ServiceUtils {

    public static final IEService eService = ToolSpring.getBean(IEService.class);
    public static final IEBService ebService = ToolSpring.getBean(IEBService.class);
    public static final IAService aService = ToolSpring.getBean(IAService.class);
    public static final ICService cService = ToolSpring.getBean(ICService.class);
    public static final PFactory pFactory = ToolSpring.getBean(PFactory.class);
    .....................
    .....................
    .....................
    .....................
    .....................
}

其中ToolSpring 为实现了 Spring 接口 ApplicationContextAware 的一个类 通过 类名 或 类class 来获取对应的 ApplicationContext 中的 Bean 获取注入到容器中的类)
具体见我的其他文章

Spring ApplicationContextAware 作用以及使用学习总结 spring bean初始化流程总结
ApplicationContext 获取Spring 中的Bean 理解以及方式,注入的获取理解
spring框架 在Util一般工具类中加载spring中的Bean对象

在其他 controller 或者 Service 中直接如下方式调用

import static com.xxxxx.xxxx.xxxx.xxxx.util.ServiceUtils.eService;

eService.xxxxx方法(入参);

ServiceUtils.eService.xxxxx方法(入参);
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值