ClassA
/occupied
班级配置:
class ClassA {
@Autowired
class ClassB;
}
班级考试:
@Configuration
class TestConfig {
@Bean(name = "instance1")
public ClassB instance1() {
return new ClassB();
}
@Bean(name = "instance2")
public ClassB instance2() {
return new ClassB();
}
}
如何在Test类中使用instance1实例化obj1和使用instance2实现obj2?
答案 0 :(得分:4)
一种可能的解决方案。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfig.class)
class Test {
@Autowired
@Qualifier("instance1")
ClassB obj1;
@Autowired
@Qualifier("instance2")
ClassB obj2; // You can also rename obj2 as instance2 and remove @Qualifier
}
使用new创建ClassA的实例并在ClassA中使用构造函数注入而不是字段注入(@Autowired)
class ClassA {
ClassB classB;
@Autowired
public ClassA(ClassB classB){
this.classB = classB;
}
}
如果您无法更改A类,则创建两个TestConfig类。一次使用obj1,一次使用obj2。并根据您的测试用例进行相应的使用
答案 1 :(得分:0)
<强>更新强>
注意:我不知道你是否理解你想做什么,但这是我的解决方案......
ClassA实际上不是一个类,而是接口
public interface ClassA {
public String getInstanceName();
public void setInstanceName(String instanceName);
}
ClassB是“ClassA”接口的实现
public class ClassB implements ClassA {
private String instanceName;
public ClassB(String instanceName) {
super();
this.instanceName = instanceName;
}
@Override
public String getInstanceName() {
return instanceName;
}
@Override
public void setInstanceName(String instanceName) {
this.instanceName = instanceName;
}
}
TestConfig配置类
@Configuration
class TestConfig {
@Bean(name = "instance1")
public ClassB instance1() {
return new ClassB("instance1");
}
@Bean(name = "instance2")
public ClassB instance2() {
return new ClassB("instance2");
}
}
和测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Autowired
@Qualifier("instance1")
ClassA objB1;
@Autowired
@Qualifier("instance2")
ClassA objB2;
@Test
public void test() {
System.out.println(objB1.getInstanceName());
System.out.println(objB2.getInstanceName());
}
}
如果它不是你想要的,也许会帮助别人。关于@Autowired
注释,文档说明如下
标记构造函数,字段,setter方法或配置方法 由Spring的依赖注入工具自动启动。
但不是班级...... 文档:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/annotation/Autowired.html