Как сделать так, чтобы Autowired Adnotation работал? - PullRequest
3 голосов
/ 27 апреля 2019

Я пытаюсь учить весну, используя некоторые интернет-курсы. У меня проблема с @Autowired, и я все еще получаю сообщение об ошибке: org.springframework.beans.factory.UnsatisfiedDependencyException

Я обнаружил много подобных проблем, но никто не устраивает мою.

Класс моего товара:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table
public class Product {

@Id
private int id;
private String name;

@Column(name = "description")
private String desc;
private double price;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getDesc() {
    return desc;
}

public void setDesc(String desc) {
    this.desc = desc;
}

public double getPrice() {
    return price;
}

public void setPrice(double price) {
    this.price = price;
}
}

Интерфейс ProductRepository:

import HIB_UD_01.product.entities.Product;
import org.springframework.data.repository.CrudRepository;


public interface ProductRepository extends CrudRepository<Product,    Integer> {
}

ProductdataApplication:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ProductdataApplication {

public static void main(String[] args) {
    SpringApplication.run(ProductdataApplication.class, args);

}

}

И мой тестовый класс:

import HIB_UD_01.product.entities.Product;
import HIB_UD_01.product.repos.ProductRepository;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;


@RunWith(SpringRunner.class)
@SpringBootTest
public class ProductdataApplicationTests {

@Autowired
ProductRepository repository;

@Test
public void contextLoads() {
}

@Test
public void testCreate() {
    Product product = new Product();
    product.setId(1);
    product.setName("Iphone");
    product.setDesc("Awesome");
    product.setPrice(1000d);
    repository.save(product);
}

}

И, наконец, мой файл свойств:

 spring.datasource.url=jdbc:mysql://localhost:3306/mydb
 spring.datasource.username=root
 spring.datasource.password=password

Я должен поместить данные о продукте в БД, но я получаю ошибку:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'HIB_UD_01.product.ProductdataApplicationTests': Unsatisfied dependency expressed through field 'repository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'HIB_UD_01.product.repos.ProductRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

Ответы [ 2 ]

2 голосов
/ 27 апреля 2019

Возможно, вам нужно включить репозитории в вашем классе SpringBootApplication (или в отдельном классе конфигурации):
https://www.concretepage.com/spring-boot/spring-boot-crudrepository-example

Если это не сработает, убедитесь, что ваш класс SpringBootApplication выше, чем остальные ваши классы, чтобы SpringBoot мог автоматически определять ваши bean-компоненты. (И затем вы можете попытаться аннотировать свой репозиторий с помощью @Repository, чтобы убедиться, что SpringBoot автоматически определяет ваш репозиторий.)

Также см .:
https://dzone.com/articles/the-springbootapplication-annotation-example-in-ja
https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-structuring-your-code.html

1 голос
/ 27 апреля 2019

ОК, проблема исправлена.Я добавил @Repository в ProductRepository.Я очистил папку репозитория и загрузил новые свежие репозитории.Тогда у меня есть ошибка с часовым поясом в связи с MySQL.Поэтому я редактирую свой файл свойств:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

Спасибо за вашу помощь!

...