我想进行一系列处理元素并通过Guice将它们连接在一起.我们假设以下路径:
interface A通过实施class AImpl需要一些输入interface B按class BImpl需求实施Ainterface C按class CImpl需求实施Binterface D按class DImpl需求实施CA的依赖关系只能在运行时解决,而不能在配置时解决.通常的方法是在这种情况下使用Assisted Injection来创建一个工厂,它将缺少的实例作为参数,如下所示:
public interface AFactory {
public A createA(String input);
}
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是这样的:
public interface DFactory {
public D createD(String inputForA);
}
Run Code Online (Sandbox Code Playgroud)
我不想AImpl在整个层次结构中手动传递特定的依赖项.是否可以通过Guice实现这一目标?如果没有,在保留注射效益的同时,优雅地避开这个问题的最佳方法是什么?
我正在寻找一种方法来对给定的定向未加权图执行拓扑排序,其中包含循环.结果不仅应包含顶点的排序,还应包含给定排序违反的边集.这组边缘应该是最小的.
由于我的输入图可能很大,我不能使用指数时间算法.如果在多项式时间内无法计算最优解,那么对于给定的问题,什么启发式算法是合理的?
algorithm graph-theory directed-graph topological-sort graph-algorithm
我有一个带注释的Groovy类@Slf4j,所以它得到一个私有的final Logger log字段,我想测试它的用法.我想继续使用@Slf4j并且不再公开该log字段以便进行测试.
我正在使用Spock 1.0编写测试,并尝试使用Spock的集成模拟和存根功能来完成此操作.全局存根应该帮助我拦截LoggerFactory调用以获取实际Logger实例,所以我目前的猜测是这样的:
LoggerFactory logFactory = GroovyStub(global: true)
logFactory.getLogger(_) >> Mock(Logger)
// create my @Slf4j-annotated object afterwards
Run Code Online (Sandbox Code Playgroud)
有趣的是,拦截实际上有效,println确认该类实际上获得了一个对象Mock for type 'Logger' named 'dummy',但是指示存根返回模拟的第二个语句似乎没有捕获.相反,默认存根行为返回另一个存根,当然不能用于模拟:
org.spockframework.runtime.InvalidSpecException: Stub 'dummy' matches the following required interaction:
1 * plugin.log.warn(_) (0 invocations)
Remove the cardinality (e.g. '1 *'), or turn the stub into a mock.
Run Code Online (Sandbox Code Playgroud)
我需要更改什么才能让存根LoggerFactory返回模拟Logger?