/ / Пружина - няма квалифициран боб тип - пружина, пружина-данни-jpa

Пружина - без квалификационен тип - пружина, пружина-данни-jpa

Току-що започнах да изучавам Пролет. Опитвате се да научите СПА, като създадете клас на човек, PersonRepository, PersonDAO и main, Вече погледнах на StackOverflow за отговори, но мисля, че направих всичко наред ... Това е изключението:

Изключение в нишката "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: няма наличен квалифициран бин от тип "beans.PersonDAO" на org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean (DefaultListableBeanFactory.java:353) на org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean (DefaultListableBeanFactory.java:340) на org.springframework.context.support.AbstractApplicationContext.getBean (AbstractApplicationContext.java:1090) на адрес com.example.SrpingDataJPA.main.main (main.java:15)

Това са моите класове:

Person.class:

package beans;

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

@Entity
@Table(name="workers")
public class Person {

@Id
@Column(name="name")
private String name;

public Person(String name) {
this.name = name;
}

public String getName() {
return name;
}

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

@Override
public String toString() {
return "Person [name=" + name + "]";
}

}

PersonRepo.class:

package beans;

import java.util.List;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface PersonRepo extends CrudRepository<Person, String>{

List<Person> findByName(String name);

}

PersonDAO.class:

package beans;

import java.util.List;

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

@Repository
public class PersonDAO {

@Autowired
private PersonRepo personRepo;

public PersonDAO() {
}

public void createPerson(Person person){
personRepo.save(person);
}

public List<Person> find(String name){
return personRepo.findByName(name);
}
}

main.class:

package com.example.SrpingDataJPA;

import javax.transaction.Transactional;

import org.jboss.jandex.Main;
import org.springframework.boot.SpringApplication;
import org.springframework.context.ApplicationContext;

import beans.PersonDAO;

@Transactional
public class main {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(Main.class, args);
PersonDAO personDAO = context.getBean(PersonDAO.class);

System.out.println(personDAO .find("daniel"));
}
}

Всички помощници?

Отговори:

0 за отговор № 1

Мисля, че има още неща, от които се нуждаете. След като направите всички промени, които ви бяха препоръчани, вашият клас трябва да изглежда така. Също така сканирайте пакетите, ако основният ви клас е в друг пакет (по някаква причина). И активирайте хранилищата на JPA.

@SpringBootApplication(scanBasePackages = "${com.example.*}")
@EnableJpaRepositories("your.repository.package")
public class Main {

public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(Main.class, args);
PersonDAO personDAO = context.getBean(PersonDAO.class);

System.out.println(personDAO .find("daniel"));
}
}

Не презареждайте хранилището в хранилище. Той просто се чувства погрешно. Направете @Component, и той ще бъде избран от пролетното зареждане:

@Component
public class PersonDAO {

@Autowired
private PersonRepo personRepo;

// your methods
}

Също така, ако използвате Spring Boot, можете да получите своите бобчета просто така:

@Autowired
private PersonDAO personDAO;

// your code here

Анотацията @SpringBootApplication е като да имате @ComponentScan, @Configuration и @EnableAutoConfiguration. препратка тук


1 за отговор № 2

PersonDAO не се сканира тук, моля добавете @ComponentScan с beans пакет във вашия основен клас и също така сте забравили да добавите @SpringBootApplication анотация към основния клас.

@ComponentScan("beans")

0 за отговор № 3

Поставете анотацията @SpringBootApplication в основния си клас, тя ще работи.