两个类既不是接口与实现类的关系,也不是父子类关系,那能不能注入呢? 答案:可以的
1、新建一个类 A
package io.xiongdi.controller; public class ClassA { public void print(){ System.out.println("this is class A"); } }
2、然后建一个类 B,两者没有任何关系,只有一个方法返回类 A
package io.xiongdi.controller; import org.springframework.stereotype.Component; @Component public class ClassB { public ClassA getClassA(){ return new ClassA(); } }
3、在建一个类,使 spring 去找类 B 的方法去给类 A 注入,继承 PropertyEditorSupport 实现 setValue 方法
package io.xiongdi.controller; import java.beans.PropertyEditorSupport; public class ClassAEditor extends PropertyEditorSupport { @Override public void setValue(Object value) { super.setValue(((ClassB)value).getClassA()); } }
4、使用测试类,验证效果
package io.xiongdi.test; import io.xiongdi.controller.ClassA; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.Resource; @SpringBootTest @RunWith(SpringRunner.class) public class EditorTest { @Resource(name = "classB") private ClassA a; @Test public void testa(){ a.print(); } }
看看输出效果吧
注意: 类名 ClassAEditor 不能改,因为 spring 是根据 要注入的 类名 + Editor 来找到的