自动装配导致Spring启动应用程序中的异常

时间:2016-03-04 01:36:54

标签: java spring spring-boot

我无法在我的Spring启动应用程序中使用Autowired注释。

我收到的错误是“无法自动装配字段。没有类型的合格bean”

我已经验证来自Controller on down的代码不是POJO并且有Spring注释。

我也无法在包之外运行我的main方法。有什么建议吗?

package com.xxx.controller;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;

@SpringBootApplication
public class SampleWebJspApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SampleWebJspApplication.class);
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleWebJspApplication.class, args);
    }

}

UserService类

package com.xxx.service;

    import java.util.List;

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

    import com.xxx.entity.User;
    import com.xxx.repository.UserRepository;

    @Service
    public class UserService {

        @Autowired
        private UserRepository userRepository;

        public List<User> findAll() {
            return userRepository.findAll();
        }

    }

UserRepository类

package com.xxx.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.xxx.entity.User;

public interface UserRepository extends JpaRepository<User, Integer> {

}

2 个答案:

答案 0 :(得分:1)

可能有两个可能的原因:

  • 组件包不包含在@ComponentScan包中。
  • @EnableJPARepositories包中不包含存储库包。

答案 1 :(得分:1)

您的@SpringBootApplication批注位于“ com.xxx.controller”包中,因此Spring可以将组件从此包扫描到其中的包中。

  

Docs:如果未定义特定的程序包,则将从声明此注释的类的程序包中进行扫描。

尝试:

  • 在@SpringBootApplication下添加@ComponentScan({“ com.xxx”}) 或修改为@SpringBootApplication(scanBasePackages = {“ com.xxx”})。

  • 只需将您的类“ SampleWebJspApplication”移动到包“ com.xxx”。一旦您的此类不像控制器,这可能是最好的解决方案。