Java 弹簧过载
我遇到了spring托管服务过载的问题。基本上,它不能像预期的那样工作,并且使用普通java代码进行测试。我想知道你是否能给我指出正确的方向,因为现在要让它工作,我需要做一些丑陋的工作。 这是我的代码的简化Java 弹簧过载,java,spring,Java,Spring,我遇到了spring托管服务过载的问题。基本上,它不能像预期的那样工作,并且使用普通java代码进行测试。我想知道你是否能给我指出正确的方向,因为现在要让它工作,我需要做一些丑陋的工作。 这是我的代码的简化 public class Base{ public void print(){ System.out.println("Base"); } } public class Extended extends Base { public void print
public class Base{
public void print(){
System.out.println("Base");
}
}
public class Extended extends Base {
public void print(){
System.out.println("Extended");
}
}
public interface Test{
public method(Base b);
public method(Extended b);
}
public class TestImpl implements Test{
public method(Base b){
b.print();
}
public method(Extended b){
System.out.println("child")
b.print();
}
}
现在,当我从控制器调用
Base b = new Extended();
test.method(b);
并且只打印“基”
为了使其正常工作,我使用了丑陋:
if(b instanceof Extended){
test.method((Extended)b);
}else {
test.method(b);
}
从我对过载的理解来看,这应该是自动发生的。当我在jUnit中调用类似的代码或其他东西时会这样做。但是当Test Impl是spring容器中的一个服务时,它不能按预期工作我认为您可能需要有不同的文本来区分是执行基类的方法还是执行子类的方法
public class Extended extends Base {
public void print(){
System.out.println("Base - Extended");
}
}
当你创建一个
基本b=新的扩展();//扩展类的内存分配
试验方法(b);//它肯定会调用Extended=>print方法
正如前面评论中提到的,将其与不同的打印语句区分开来,以便您能够理解 由于您在spring上,所以[Base b=new Extended()]不适用于spring,spring在其容器中初始化实例对象本身,您可以使用@Autowired从所需类的容器中获取实例
关于继承和重载问题,请在spring中检查@Qualifier。您可以使用@Qualifier annotation精确地指出基类或希望获得引用的子类。这与Spring无关,Java就是这样工作的。调用哪种方法取决于变量的类型,即
Base
,而不是变量所引用的实际对象的类型(即扩展的
)。“从我对重载的理解来看,这应该是自动发生的。”=>不,你对调用重载方法的理解是不正确的。请发布你的spring配置/wiringJasper是正确的。我使用SpockGroovy来检查它,它按照我的预期工作,这就是误导我的地方。当我把它移到jUnit时,我惊讶的发现结果是不同的,它并没有解决问题。在实际代码中,我有“扩展”打印,我已经纠正了这个问题。我使用Spock groovy来检查它,它按照我的预期工作,这就是误导我的地方。令我惊讶的是,当我把它移到jUnit时,结果却不同了。你是对的