当前位置: 首页 > 知识库问答 >
问题:

Spring不工作

诸葛皓
2023-03-14

打电话pp.java

@Service
@ComponentScan(basePackages = { "com.codegeekslab.type" })
public class CallingApp {

    @Autowired
    @Qualifier("BasicPhone")
    private Phone phone;

    public CallingApp(Phone phone) {
        this.phone = phone;
    }

    public void makeCall(int number) {
        phone.openApp(number);
    }

}

电话JAVA

package com.geekslab.device;

public interface Phone {

    public void openApp(int number);

}

基本电话。JAVA

package com.codegeekslab.type;

import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import com.geekslab.device.Phone;
@Component("BasicPhone")
 public class BasicPhone implements Phone {
    {
        System.out.println("BasicPhone");
    }

    public void openApp(int number) {
        System.out.println("calling via simcard... " + number);
    }

}

智能手机。JAVA

package com.codegeekslab.type;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import com.geekslab.device.Phone;

@Component("SmartPhone")
public class SmartPhone implements Phone {
    {
        System.out.println("SmartPhone");
    }

    public void openApp(int number) {
        System.out.println("calling via whatsapp..." + number);
    }

}

测验JAVA

package com.codegeekslab.test;

 import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.codegeekslab.app.CallingApp;
import com.codegeekslab.type.BasicPhone;
import com.codegeekslab.type.SmartPhone;
import com.geekslab.device.Phone;

 public class Test {

    public static void main(String[] args) {

        //ApplicationContext context =
        //      new GenericXmlApplicationContext("beans.xml");
        //SpringHelloWorld helloSpring  = context.getBean("springHelloWorld", SpringHelloWorld.class);
        //comment this for xml less spring 
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
         context.scan("com.codegeekslab.app","com.codegeekslab.type");
        //context.register( BasicPhone.class,SmartPhone.class,CallingApp.class);
         context.refresh();
        CallingApp  callingApp  = context.getBean("callingApp", CallingApp.class);  
        callingApp.makeCall(99999);

    }
}

即使我给限定符为@Qualifer(BasicPhone)CallingApp类,我得到异常如下:

没有定义类型[com.geekslab.device.Phone]的限定bean:预期单个匹配bean,但发现2:BasicPhone,SmartPhone

共有3个答案

端木安国
2023-03-14

您不需要添加参数构造函数

public CallingApp(){
    //do nothing
}
public CallingApp(Phone phone) {
    this.phone = phone;
}
尹俊雅
2023-03-14

我删除了CallingApp类构造函数,它成功了。

 public CallingApp(Phone phone) {
                this.phone = phone;
            }

因为构造函数重写了setter方法。

罗和煦
2023-03-14

您在CallingApp服务中将phone作为构造函数参数传递,而不指定bean

尝试在构造函数中放置一个限定符,或者坚持自动线注入,这是您已经做过的事情。

 类似资料:
  • 我有一个控制器,我把get和post方法都放在其中。这两种方法都很好,但当我将@ModelAttribute注释引入POST方法时,它开始给我状态400——客户端发送的请求在语法上不正确。 我不知道我做错了什么。视图看起来像: 我尝试将命令名称=“想法”更改为模型属性=“想法”,但没有好处。 Spring控制器看起来像 但是一旦我从submit方法中删除了@ model attribute(" I

  • 我怎么才能让@JsonIgnore工作呢?我有课。即使我把注释放在那里,它对输出也没有影响。我在用杰克逊。 这是我的控制器方法: 这是我的servlet-context.xml:

  • 我之前有一个关于这个问题的帖子已经解决了。然而,自从用自动连线bean和较少的XML配置重建项目后,我发现我正在重新考虑这个问题。我遵循了我以前的项目实现这一点的方式,但它不起作用。有人能帮助我为什么或者我应该改变什么来使它工作吗? 注册服务: 注册DAO:

  • 我从Spring Boot开始,我正在学习一个教程。在教程中,他们用@Request estMap和GET方法创建了控制器,一旦他们运行了应用程序,在控制台中会显示这样的内容: s、 w.s.m.m.a.RequestMappingHandlerMapping:将“{[/rooms],methods=GET}”映射到java上。util。列表 但就我而言,我犯了一个错误: s、 w.s.m.m.a

  • 这是我配置Spring安全性的方式,在控制器中,我ROLE_ANONYMOUS作为权限。看起来安全性没有拦截请求并检查JWT。如何配置antmatcher…? 下面是我的控制器代码 更新看起来antmatcher不起作用。这是我点击api时的日志。