我有一些Java代码,希望将其转换为可以通过依赖项注入在Grails控制器和服务中使用的Bean。该代码基于此处的代码(作为独立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运行应用程序时,Grails崩溃,并显示一条很长的错误消息,提示它不能与空数据库一起使用。我不认为PersonRepository或graphDatabase都可以使用@Autowire。
所以问题是,要在Grails控制器或服务中将Bean内的Java代码(在src / java中)编写为Bean,我还需要做什么?
-根据示例代码编辑答案-
我怀疑该问题与Grails和Java代码混合在一起时组件扫描的工作方式有关。这也可能与在这种情况下创建bean的顺序以及幕后类的代理有关。
我进行了以下更改以使此工作:
我返回到neo4j xml配置,并添加了grails-app / conf / resources.xml和必要的neo4j配置。
从类中删除了@ EnableNeo4jRepositories批注
从Config.groovy中获取了语句-grails.spring.bean.packages = [‘grailsSdn4j’]
供其他参考,resources.xml中的neo4j配置如下所示:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/data/neo4j http://www.springframework.org/schema/data/neo4j/spring-neo4j.xsd">
<context:spring-configured/>
<context:annotation-config/>
<neo4j:config storeDirectory="target/data/db" base-package="grailsSdn4j"/>
<neo4j:repositories base-package="grailsSdn4j"/>
</beans>
问题内容: 我有一个包含一些字段的JPanel。JPanel的高度是有限的,因此我必须在其周围放置一个JScrollPane以便人们向下滚动。 如下所示,它完美显示。但是您无法向下(或向上)滚动。 详细信息面板: 问题答案: 您的DetailPanel没有与之关联的布局管理器,这意味着在您向其添加子项时它不会扩展,这意味着JScrollPane没有任何可滚动的地方。调用DetailPanel或重写
问题内容: 这是我的代码。 这应该返回,但实际上正在返回。为什么这不起作用? 问题答案: 不支持正则表达式,请使用:
问题内容: 这真让我抓狂。我在具有以下结构的文件夹中有一个NetBeans项目: 在src中,我的代码在软件包中。我想做的是使用 来自com.my.package包中的类,但它只是拒绝工作!“ new.png”图像位于资源文件夹中。我在这里想念什么吗? 经过大量的游玩并四处移动“ new.png”图像以查看何时可以找到该图像,它终于可以工作了,但仅当我将图像放入build文件夹时才可以。那么,我该
问题内容: 考虑以下方法,该方法将返回一个字段(如果存在)或递归调用自身直到找到该字段: 虽然这可行,但我想可以将其缩短为: 但是奇怪的是,该部分似乎总是被调用。 我在这里想念什么? 问题答案: 方法的参数始终在调用方法之前进行求值。您想要带一个仅在不存在时才被调用的:
问题内容: 我最近将项目升级到grails 2.3.0。一切正常,除非我每次更改代码时都遇到自动重装无法正常工作的问题。这包括所有项目人工制品- 控制器,域,服务,gsps,css和javascript文件。 我的较早版本的grails可以正常工作,并且每次进行更改时都会重新加载和重新编译。 我知道这个问题很普遍,我已经搜寻了吉拉(Jira),纳布尔(Nabble),在这里呆了好几天,但我发现没有
问题内容: 我在Java中使用以下使用selenium的代码。我要添加4秒的pageLoadTimeout,但是,驱动程序将继续等待,直到整个页面加载完毕。有什么帮助吗? 问题答案: 解决该 问题的方法是将您的 版本升级到 v3.5.0 。这是有效的代码块,并且使用 最少的代码即可生成您自己的代码: 代码块: 控制台输出: 捕获WebDriverException 代码块: 控制台输出: