创建名为“xxx”的bean时出错

时间:2017-11-19 18:09:13

标签: spring spring-mvc dependency-injection autowired

我遇到依赖注入问题。

我已经尝试了@EJB@Autowired,但没有任何效果。

这就是我现在所拥有的:

的HomeController

@Controller
@ComponentScan(basePackages = "org.vives.repositories")
public class HomeController extends HttpServlet {

    private final BeerRepository beerRepository;

    @Autowired
    public HomeController(BeerRepository beerRepository) {
        this.beerRepository = beerRepository;
    }

    @GetMapping("/")
    public String index(Model model) {

        List<Brewer> brewers = this.beerRepository.getAll();

        model.addAttribute("brewers", brewers);

        return "index";
    }
}

当我将鼠标悬停在beerRepository参数上时,我得到了: enter image description here

BeerRepository

@Stateless
@Repository
public class BeerRepository {

    @PersistenceContext(unitName = "vivesPU")
    private EntityManager entityManager;

    public List<Brewer> getAll() {
        List<Brewer> brewers = new ArrayList<>();
        Brewer br0 = new Brewer("WESTVLETEREN BREWERY");
        Brewer br1 = new Brewer("BRASSERIE CANTILLON");
        Brewer br2 = new Brewer("RODENBACH BREWERY");
        Brewer br3 = new Brewer("KULMINATOR");
        Brewer br4 = new Brewer("‘T BRUGS BEERTJE");

        brewers.add(br0);
        brewers.add(br1);
        brewers.add(br2);
        brewers.add(br3);
        brewers.add(br4);
        return brewers;
    }
}

的persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
             xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="vivesPU" transaction-type="JTA">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>jdbc/beers</jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyTenSevenDialect"/>
            <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform"/>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
            <property name="hibernate.show_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

错误日志(其中一些)

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'homeController' defined in file [..\HomeController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beerRepository': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'vivesPU' available
    ...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beerRepository': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'vivesPU' available
...
Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'vivesPU' available]]

vivesPU是持久性单位名称,为什么它会去那里?

项目结构

enter image description here

有人可以向我解释发生了什么吗?我真的很困惑。大多数文档和帖子都是旧的(Spring 4和Spring XML)几乎没有相关性。

2 个答案:

答案 0 :(得分:0)

您必须自动装配BeerRepository或删除以下行

    private final BeerRepository beerRepository;

答案 1 :(得分:0)

您的控制器完全错误。它应该是

pip install telethon --upgrade