组件化开发过程当中,随着组件愈来愈多,组件的以前的交互就会变得很是的复杂,此时组件间通讯变得尤为的重要,ServicePool就是为组件化而生,用最简单的方式进行组件间通讯。使用依赖注入,按需灵活注入组件。同时支持组件热插拔,达到组件即插即用的效果。可配置组件生命周期,作到组件按需建立和及时回收,充分利用懒加载的思想,有效解决组件初始化耗时致使的app启动速度问题。点击进入 项目地址java
ServicePool包含有 Activity路由, 组件路由等等最经常使用的组件化能力。除此以外,组件化开发过程当中有没有遇到过想使用某个已有的类,好比一个工具类的时候,发现这个工具类在当前类的上层,没法直接依赖和引用,而修改这个工具类的层级又会牵一发而动全身的问题? 有没有想要一个差别响应的能力,在不一样的组件中或者环境下,有着不一样的响应方式?有没有想要一个自适应场景的能力,自动适应当前环境(好比Java仍是Android环境,好比Debug环境仍是Release环境等等),从而使用最合适的功能。又有没有想过如何让组件作到像USB接口同样插上就能直接使用,拔掉也不影响主体功能的即插即用的效果。等等...。 下面就来具体介绍一下这个组件化神器——ServicePool!git
如上图所示:github
/**
* 服务池pool中
*
* IA.java
*/
public interface IA {
void aName();
}
/**
* 服务池pool
*
* IB.java
*/
public interface IB {
void bName();
}
复制代码
/**
* 组件A
*
* AService.java
*/
@Service
public class AService implements IA {
@Override
public String aName() {
return "A Service";
}
}
复制代码
/**
* 组件B
*
* BService.java
*/
@Service
public class BService implements IB {
@Override
public String bName() {
return "B Service";
}
}
复制代码
组件A中执行:
IB b = ServicePool.getService(IB.class);
System.out.println("I'm A Service, I can get " + b.bName());
输出:
I'm A Service, I can get B Service 组件B中执行: IA a = ServicePool.getService(IA.class); System.out.println("I'm B Service, I can get " + a.aName()); 输出: I'm B Service, I can get A Service 复制代码
/**
* 服务池pool中
*
* IPathService.java
*/
public interface IPathService {
String pathServiceName();
}
复制代码
/**
* 组件A中
*
* PathService
*/
@Service(path = "pathService")
public class PathService implements IPathService {
@Override
public String pathServiceName() {
return "Path Service";
}
}
复制代码
组件B中执行:
IPathService pathService = ServicePool.getService(IPathService.class);
System.out.println(pathService.pathServiceName());
输出:
Path Service
复制代码
若是IA有多个实现,如上图所示,ServicePool会比较每一个实现优先级,来决定最终返回IA的哪一个实现缓存
/**
* 服务池pool中
*
* IPriorityService.java
*/
public interface IPriorityService {
int getPriority();
}
复制代码
/**
* 组件A中
*
* PriorityService1.java
* PriorityService2.java
*/
@Service(priority = 1)
public class PriorityService1 implements IPriorityService {
@Override
public int getPriority() {
return 1;
}
}
@Service(priority = 1)
public class PriorityService2 implements IPriorityService {
@Override
public int getPriority() {
return 2;
}
}
复制代码
组件B中执行:
IPriorityService priorityService = ServicePool.getService(IPriorityService.class);
System.out.println("priority is " + priorityService.getPriority());
priorityService = ServicePool.getService(PriorityService1.class);
System.out.println("priority is " + priorityService.getPriority());
priorityService = ServicePool.getService(PriorityService2.class);
System.out.println("priority is " + priorityService.getPriority());
输出:
priority is 2
priority is 1
priority is 2
复制代码
每一个由ServicePool建立的service对象都有各自生命周期,service对象的生命周期由ServicePool管理, 并由@Service注解配置生命周期类型。bash
组件A中
/**
*
* OnceService.java
*/
@Service(scope = IService.Scope.once)
public class OnceService implements LifecycleService {
}
/**
*
* TempService.java
*/
@Service(scope = IService.Scope.temp)
public class TempService implements LifecycleService {
}
/**
*
* GlobalService.java
*/
@Service(scope = IService.Scope.global)
public class GlobalService implements LifecycleService {
}
复制代码
组件B中执行:
System.out.println(ServicePool.getService(OnceService.class) == ServicePool.getService(OnceService.class));
//System.out.println(ServicePool.getService(TempService.class) == ServicePool.getService(TempService.class));//不可靠
System.out.println(ServicePool.getService(GlobalService.class) == ServicePool.getService(GlobalService.class));
输出:
false
true
复制代码
未完待续....app
未完待续....ide
未完待续....工具
未完待续....组件化
快速接入ServicePoolui