两个类既不是接口与实现类的关系,也不是父子类关系,那能不能注入呢? 答案:可以的
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;@Componentpublic 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 来找到的