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方法(入参);