繁体   English   中英

Spring Autowired服务和控制器无法正常工作

[英]Spring Autowired service and controller not working

我在这里阅读了很多关于这种问题的内容,但似乎我的代码很好但是autowire不能正常工作:

Error creating bean with name 'optionController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private service.InteractionBanque controllers.OptionController.interactionBanque; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [service.InteractionBanque] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

这是我的控制器的代码:

package controllers;


package controllers;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import model.Banque;
import model.Client;
import service.InteractionBanque;
import serviceimpl.InteractionBanqueImpl;

@Controller
public class OptionController {

    @Autowired
    private InteractionBanque interactionBanque;


    @RequestMapping(value="/virement",method=RequestMethod.GET)
    public String index(Model model, @ModelAttribute Client client) {
        model.addAttribute("virement", new Virement());
        return "virement";
    }
    @RequestMapping(value="/virement",method=RequestMethod.POST)
    public String index(@ModelAttribute Virement virement, Model model) {

        return "options";
    }

}

我的服务守则:

package serviceimpl;

import java.util.HashMap;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;

import dao.BanqueDAO;
import daoimpl.BanqueDaoImpl;
import model.Banque;
import model.Client;
import service.InteractionBanque;
import utils.SendRequest;

@Service
public class InteractionBanqueImpl implements InteractionBanque {
    public static final int END_ID_BANQUE = 5;
    public static final String LOGIN_URL = "/account";

    public boolean connecter(Client client) {
        some code
    }

}

和接口的代码:

package service;

public interface InteractionBanque {
    boolean connecter(Client client);
}

我的Application类定义了应该用于连接所有内容的@SpringBootApplication

package controllers;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

所以我不明白,对我来说,这应该做的工作,但自动装配不起作用。

帮助将不胜感激:)

@SpringBootApplication仅在使用它的类中扫描包(递归)。 InteractionBanqueImpl位于另一个包中。

使用Application类创建一个包'app',然后移动到它的controllers和其他包。 应该没事。

正如@Mati所说,你的包有问题。

为您的应用程序创建一个root包并移动它下面的所有内容,所以你有这样的东西:

+ myapp
  Application.java
  + controller
  + service
  + serviceimpl

您将Application类放在其余代码的父包中的答案是可行的,但如果您不想更改包结构,则另一种方法是使用@ComponentScan注释,指定包包含您要自动装配的组件,例如:

@ComponentScan(basePackages = {"serviceimpl", ...}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM