提问者:小点点

Spring-没有符合条件的bean类型


刚开始学习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"));
	}
}

有人帮忙吗伙计们?


共3个答案

匿名用户

在这里没有扫描个人数据,请在您的主类中添加带有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注释放在您的主类中,它会起作用。