Поле Spring требует бин типа, который не может быть найден - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь создать Spring Boot Application с простой страницей входа, но когда я пытаюсь использовать @Autowired с интерфейсом, который я создал, мне кажется, проблема. Я прочитал 7-8 подобных вопросов, но ответы, которые я нашел там, были бесполезны для меня. @Autowired отлично работает, когда я использую его на интерфейсе, который расширяет JpaRepository.

Моя структура:

enter image description here

Мои пакеты находятся на том же уровне, что и мой файл приложения.

Вот мой контроллер

@Controller
@RequestMapping(value = "/users")
public class LoginContoller     {



@Autowired
UsersRepositoryCustom usersRepositoryCustom;

@RequestMapping(value = "/login", method = RequestMethod.GET)
public String loginForm(){
    return "login";
}

@RequestMapping(value = "/login", method = RequestMethod.POST)
public @ResponseBody
String verifyLogin(@RequestParam String name, @RequestParam String password) {

    System.out.println("Controller: name: " + name + " pass " + password);
    Users users=usersRepositoryCustom.loginUser(name, password);
    if (users==null) {
        System.out.println("login control user null");
        return "login";
    }

    return "users/all";
}
}

Repository:

    @Repository
    public interface UsersRepositoryCustom {
        Users loginUser(String name, String password);
    }

Я не думаю, что это помогает, но вот реализация

    public abstract class UserImpl implements UsersRepositoryCustom {


        @Autowired
        UsersRepository usersRepository;

        @Override
        public Users loginUser(String name, String password) {
            System.out.println("UserImpl: nume: " + name + " pass " + password);
            Users user=usersRepository.findByUsername(name);
            if (user != null && user.getPassword().equals(password)) {
                System.out.println("User Login"+user.getId()+"  "+user.getUsername());
                return user;
            }
            return null;
        }
    }

Application.properties:

server.port=8080
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url= jdbc:mysql://localhost:3308/assignment-one-db
spring.datasource.username=root
spring.datasource.password=789456123

spring.jpa.hibernate.ddl-auto= update
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true

pom.xml

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

        <groupId>com.asg1</groupId>
        <artifactId>asg1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>

        <name>asg1</name>
        <description>assignment1</description>

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.0.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>10</java.version>
        </properties>

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>


    </project>

Я пытаюсь использовать @EnableJpaRepositories, @EnableAutoConfiguration, но это было бесполезно

Вот ошибка:

Описание:

Field usersRepositoryCustom in com.asg1.asg1.controllers.LoginContoller required a bean of type 'com.asg1.asg1.repository.UsersRepositoryCustom' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'com.asg1.asg1.repository.UsersRepositoryCustom' in your configuration.


Process finished with exit code 1
...