package org.test4j.module.spring.strategy.injector;
import org.test4j.module.spring.strategy.Test4JBeanFactory;
/**
* 查找spring策略接口,以及策略工厂类
*
* @author darui.wudr
*/
public abstract class SpringBeanInjector {
private final static SpringBeanInjector byName = new SpringBeanInjectorByName();
private final static SpringBeanInjector byResource = new SpringBeanInjectorByResource();
private final static SpringBeanInjector byType = new SpringBeanInjectorByType();
private final static SpringBeanInjector byAutowired = new SpringBeanInjectorByAutowired();
/**
* 往测试类实例中注入spring bean
*
* @param testedObject
*/
public static void injectSpringBeans(Object beanFactory, Object testedObject) {
if (beanFactory instanceof Test4JBeanFactory) {
byName.injectBy((Test4JBeanFactory) beanFactory, testedObject);
byResource.injectBy((Test4JBeanFactory) beanFactory, testedObject);
byType.injectBy((Test4JBeanFactory) beanFactory, testedObject);
byAutowired.injectBy((Test4JBeanFactory) beanFactory, testedObject);
} else {
throw new RuntimeException(String.format(
"the type error, object[%s] isn't an instance of Test4JBeanFactory.", beanFactory == null ? null
: beanFactory.getClass().getName()));
}
}
/**
* 按Annotation注释注入spring bean到测试实例中
*
* @param context spring容器
* @param testedObject 测试类
* @param annotation 字段声明的Annotation
* @return
*/
public abstract void injectBy(Test4JBeanFactory beanFactory, Object testedObject);
}