2016-05-12 1 views
0

Я видел много вопросов об этой ошибке раньше, но без разрешения, которое работает для меня.Определяющий компонент типа определяется при запуске основного метода

Я новичок в Spring, но стараюсь использовать Spring Data для библиотеки Neo4J для проекта. Я решил начать с быстрым шипом, чтобы убедиться, что я знаю, как все работает, и поэтому я создал простой класс App с основным методом, как так:

package org.example.neo4jSpike; 

import org.example.neo4jSpike.domain.Actor; 
import org.example.neo4jSpike.repositories.ActorRepository; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.annotation.AnnotationConfigApplicationContext; 
import org.springframework.stereotype.Component; 

/** 
* Hello world! 
* 
*/ 
@Component 
public class App 
{ 
    @Autowired 
    private ActorRepository actors; 

    @SuppressWarnings("resource") 
    public static void main(String[] args) 
    { 
     ApplicationContext context = new AnnotationConfigApplicationContext(SpikeConfiguration.class); 
     App a = context.getBean(App.class); 
     a.init(); 
    } 

    private void init(){ 
     Actor michaelDouglas = actors.save(new Actor("Michael Douglas")); 
     System.out.println("Hello World!"); 

     System.out.println(michaelDouglas.getId()); 
     System.out.println("Total people: " + actors.count()); 
    } 
} 

У меня есть установки класса конфигурации, а также:

package org.example.neo4jSpike; 

import org.neo4j.ogm.session.Session; 
import org.neo4j.ogm.session.SessionFactory; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.Scope; 
import org.springframework.context.annotation.ScopedProxyMode; 
import org.springframework.data.neo4j.config.Neo4jConfiguration; 
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 

@Configuration 
@EnableNeo4jRepositories(basePackages = "org.example.neo4jSpike.repositories") 
@EnableTransactionManagement 
public class SpikeConfiguration extends Neo4jConfiguration{ 
    @Bean 
    public SessionFactory getSessionFactory() { 
     // with domain entity base package(s) 
     return new SessionFactory("org.example.neo4jSpike.domain"); 
    } 

    // needed for session in view in web-applications 
    @Bean 
    @Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS) 
    public Session getSession() throws Exception { 
     return super.getSession(); 
    } 
} 

Я добавлю код для своих хранилищ и классов предметной области, если это необходимо, но все они созданы таким же образом, и все довольно просто.

Когда я пытаюсь запустить main, однако, я получаю

No qualifying bean of type [org.example.neo4jSpike.App] is defined

Я не вижу, как она не определена, то именно там, определяется как @Component. Что я недопонимаю?

+1

Приятно, что у вас есть '@ Component', но он также не может быть ...' @ Component' и no '@ ComponentScan' в вашем классе конфигурации, поэтому он никогда не будет обнаружен ... –

+0

As Я сказал, это мое первое приложение Spring, поэтому я не знал об этом. Благодарю. Поверните его в ответ, и я соглашусь, что вызвало эту проблему. – Paul

ответ

2

Неважно, если вы помещаете аннотацию @Component, если Spring не сканирует ваш пакет классов. Вы можете добавить аннотацию @ComponentScan в свой класс конфигурации и настроить ее для сканирования пакета, в котором находится ваш класс App. Кроме того, вы можете удалить аннотацию @Component и объявить приложение типа Bean типа в классе конфигурации.

Надеюсь, это поможет.

Смежные вопросы