Grails @Autowire в классе Java не работает

У меня есть некоторый Java-код, который я хочу превратить в Bean-компонент, который можно использовать в контроллерах и службах Grails с помощью внедрения зависимостей. Код основан на том, чтоВот (который отлично работает при запуске в качестве отдельного Java-приложения).

В частности, у меня есть:

// WannabeABeanDB.java
package hello;

import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.kernel.impl.util.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.config.EnableNeo4jRepositories;
import org.springframework.data.neo4j.config.Neo4jConfiguration;
import org.springframework.data.neo4j.core.GraphDatabase;

import java.io.File;

@Component
@Configuration
@EnableNeo4jRepositories(basePackages = "hello")
public class WannabeABeanDB extends Neo4jConfiguration {

    public WannabeABeanDB() {
        setBasePackage("hello");
    }

    @Bean
    GraphDatabaseService graphDatabaseService() {
        return new GraphDatabaseFactory().newEmbeddedDatabase("accessingdataneo4j.db");
    }

    @Autowired
    PersonRepository personRepository;

    @Autowired
    GraphDatabase graphDatabase;

    public String testThatWeCanAccessDatabase() throws Exception {
        Person greg = new Person("Greg");

        Transaction tx = graphDatabase.beginTx();
        try {
            personRepository.save(greg);
            greg = personRepository.findByName("Greg").toString();
            tx.success();
        } finally {
            tx.close();
        }
        return greg.name;

    }    
}



// Person.java
package hello;

import java.util.HashSet;
import java.util.Set;

import org.neo4j.graphdb.Direction;
import org.springframework.data.neo4j.annotation.Fetch;
import org.springframework.data.neo4j.annotation.GraphId;
import org.springframework.data.neo4j.annotation.NodeEntity;
import org.springframework.data.neo4j.annotation.RelatedTo;

@NodeEntity
public class Person {

    @GraphId Long id;
    public String name;

    public Person() {}
    public Person(String name) { this.name = name; }

    public String toString() {
        return this.name;
    }
}



// PersonRepository.java
package hello;

import org.springframework.data.repository.CrudRepository;

public interface PersonRepository extends CrudRepository<Person, String> {    
    Person findByName(String name);    
}

Итак, теперь я хочу использовать из контроллера:

// TestController.groovy
package hello

import hello.WannabeABeanDB

class TestController {

WannabeABeanDB graph

def index() { 
    render graph.test()
    }
}

Я установил (в пределах Config.groovy):

grails.spring.bean.packages = ['hello']

Однако, когда я запускаю приложение grails run, Grails вылетает с очень длинным сообщением об ошибке, в котором говорится, что он не может работать с нулевой базой данных. Я не верю, что @Autowire выбирается либо для PersonRepository, либо для graphDatabase.

Таким образом, вопрос в том, что еще мне нужно сделать, чтобы иметь возможность писать код Java (внутри src / java) в качестве Bean-компонента в контроллере или сервисе Grails?

Ответы на вопрос(1)

Ваш ответ на вопрос