刚开始学习Spring。试图通过创建一个人员类来学习JPA,人员库
、人员库
和主
。我已经在StackOverflow上寻找答案,但我认为我做得一切都很好…这是例外:
线程"main"org. springframe.bean.Factory.NoSuchBeanDefitionException中的异常:org.springframework.beans.factory.support中没有"bean.PhotoDAO"类型的限定bean。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.java:15)
这是我的课程:
人.类:
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 + "]";
}
}
类:
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);
}
人道课:
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"));
}
}
有人帮忙吗伙计们?
在这里没有扫描个人数据,请在您的主类中添加带有bean
包的@ComponentScan
,并且您忘记将@SpringBootApplication
注释添加到主类。
@ComponentScan("beans")
我认为您还需要更多的东西。在进行了所有建议的更改后,您的类应该看起来像这样。此外,如果您的主类在其他包中(出于某种原因),请扫描包。并启用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,它也会被Spring boot选中:
@Component
public class PersonDAO {
@Autowired
private PersonRepo personRepo;
// your methods
}
此外,如果您使用的是Spring Boot,您可以像这样简单地获取bean:
@Autowired
private PersonDAO personDAO;
// your code here
@SpringBootApplication注释就像拥有@ComponentScan、@Configuration和@EnableAutoConfiguration。参考这里
将@SpringBootApplication注释放在您的主类中,它会起作用。