Току-що започнах да изучавам Пролет. Опитвате се да научите СПА, като създадете клас на човек, 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 в основния си клас, тя ще работи.