这个方法将实例放进singletonCache时,仅仅对这个实例本身的class进行了处理,建议将实例所在对象声明的接口也放进去:
Class<?>[] interfaces = singletonObject.getClass().getInterfaces();
if (interfaces != null && interfaces.length > 0) {
for (Class<?> intf : interfaces) {
singletonCache.putIfAbsent(intf, singletonObject);
}
}
否则,假设某对象HelloServiceImpl implements HelloService,
即使现有实例放进了AopFactory
AopManager.me().addSingletonObject(new HelloServiceImpl());
在使用的时候
HelloService service = Aop.get(HelloService.class);
这个service并没有拿到之前放进去的那个HelloServiceImpl的实例,与面向接口编程,使用方不需要知道并非必要的实现信息有悖.