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

为什么Spring应用程序在使用@autowire[duplicate]时崩溃

姜正初
2023-03-14

我使用的是IntelliJIDEA CE edition(11.0.4)的最新版本。有一件事我在任何地方都找不到,它阻碍了我对Java/Spring的进一步改进。

控制器:

import com.example.demo.classes.SaveToFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MainController {
    @Autowired protected SaveToFile saveToFile;
    //@Autowired SaveToDb saveToDb;

    @RequestMapping("/start")
    public String whatever(@RequestParam(value="name", defaultValue="World") String name) {
         saveToFile.save(name);
         return "something";
        //return new SaveToFile(name);
    }
}

类:导入com.example.demo.interfaces.ISave;

public class SaveToFile implements ISave {

    private String filename = "Vlad";   

    @Override
    public void save(String name) {
        System.out.println("Saving " + name + " to file.");
    }

    public String getFilename(){
        return filename;
    }
}

类接口:

public interface ISave {
    void save(String name);
}

没什么特别的,只是为了掌握Spring和Java。

在我的控制器里,当我试图使用

@Autowired protected SaveToFile saveToFile;

我收到一个阻止应用启动的错误。以下是错误:

任务应用程序的执行失败。main()。

处理'command'/Library/Java/JavaVirtualMachines/openjdk-11.0.2。jdk/Contents/Home/bin/java“”以非零出口值1结束

如果我把它注释掉,我可以用“new”来实例化我的类,但这不是重点。

我尝试过在“项目结构”菜单选项中更改SDK。但没有用。也许值得一提的是,我在科特林也参与过类似的项目,完全没有问题。我试着模仿“Kotlin”的设置,但什么都没有。

有人知道这里发生了什么吗?

共有3个答案

张和豫
2023-03-14

Spring需要把它作为一个组件,否则它真的不知道从哪里自动连接它。

尝试用@Service注释它,并使类本身在组件扫描程序的范围内。

卓致远
2023-03-14

首先,使SaveToFile成为Spring管理的bean:

@Component
public class SaveToFile implements ISave {
   // [...]    
}

第二,自动连接bean:

@RestController
public class MainController {

   @Autowired protected ISave saveToFile;

   // [...]
}
艾俊悟
2023-03-14

您应该用@Component注释SaveToFile类,或者在任何配置类中创建一个该类型的bean(注释的@Bean),以便@autowed工作。

 类似资料:
  • 我试图调用ViewModel中片段中的函数,但每次调用时它都会崩溃,我不知道为什么。下面是代码: 呼吁协程: 函数的代码: 如果我不使用协同程序,只使用我收到一个错误,说我必须从其他挂起函数或协同程序调用这个函数。 这就是错误: 我的ViewModel是: 在我称之为协程的片段中,我这样声明它:

  • 我在简单的Spring Boot应用程序上工作,并希望在它上使用并发线程。为了实现这一点,我在服务方法上使用@Async注释,但是当我添加@Async注释时,SpringDI崩溃。它的工作没有@Async在一个线程没有问题。为了调用服务方法,我创建了jUnit test。错误日志显示DI不起作用,也没有为服务类找到这样的bean。请帮助在Spring上使用@Async运行多个线程。 编辑我试图将测

  • 3 CoreFoundation CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION+28 4 CoreFoundation__CFrunloopdoTimer+880 5 CoreFoundation__CFrunloopdoTimers+276 10 Figment POS AppDelegate.Swift-第39行main+39 11

  • 每当我请求权限时,我的应用程序就会崩溃。作为清单标记的子项,我在清单中定义了正确的使用权限。它没有给出任何错误,只是一个弹出窗口说包安装程序已经停止,监视器中有一行说“sendUserActionEvent()mView==null”,我不确定这与崩溃有关。 这是我请求权限的片段: 最低sdk设置为23,在三星Galaxy S7上进行测试。 你可以在这里看到完整的代码https://github.

  • 我尝试了太多东西,但每次按下“计算”(hesapla)按钮后,应用程序都会崩溃。 例如: 我应该写什么/做什么? 有一只原木猫; 通用域名格式。ertugrulguleryuzgmail。sdunothesaplama E/AndroidRuntime:致命异常:主java。lang.NumberFormatException:无效的int:“”在java上。整型。java上的invalidit(