我已经运行了带有基于注释的配置的Spring Boot,但我#是Spring的新手。我真的在其他地方找不到解决我的问题的方法。我有具有以下继承结构的任务对象:
现在,我想将一些存储库自动关联到SystemTask。此外,我还想将存储库和一些服务自动关联到UserTask(及其所有子项)。
如何做到这一点?使用以下代码,我得到一个空指针异常。
家长:
public abstract class ParentTask implements Runnable {
// some fields
protected ParentTask(/*fields*/) {
//this.fields = fields;
}
@Override
public abstract void run();
}
第一个孩子:
public class SystemTask extends ParentTask {
@Autowired
protected SomeService someService;
protected SystemTask(/*fields*/) {
super(fields);
//set some other fields
}
@Override
public void run() {
someService.doSomething(); // <-- nullPointerException
}
}
第二个孩子:
public abstract class UserTask extends ParentTask {
@Autowired
protected SomeService someService;
@Autowired
protected SomeRepository someRepository;
protected UserTask(/*fields*/) {
super(fields);
}
@Override
public abstract void run();
}
UserTask的子级(应具有UserTask的自动连接资源)
public class SpecificUserTask extends UserTask{
private SpecificUserTask (/*fields*/) {
super(fields);
//set some other fields
}
@Override
public void run() {
// do something
}
}
My Repository是一个标准的mongo Repository IMLPement,不应该有任何错误。我的“someService”如下所示:
@Service
public class SomeService{
// some fields
@Autowired
private someOtherRepository someOtherRepository;
// some methods
public void doSomething() {
//...
}
}
所以我的问题又来了:
提前谢谢大家。
编辑:这是我在需要时创建新任务的方式:
@Service
public class TaskAdministration {
private final TaskAdministrationRepository taskAdministrationRepository;
public void commissionSystemTask(fields) {
SystemTask task = new SystemTask(fields);
taskScheduler.schedule(task, taskTrigger);
// persist task to restore if necessary
taskAdministrationRepository.save(task);
}
}
我解决了我的问题,实际上在非spring托管类中需要一个自动连接的服务/存储库。我使用了手动依赖注入,如下所述:
如何手动将bean与Spring自动关联?
这样我就可以拥有一个类的多个实例,还可以使用Spring管理的服务。这是我现在的代码:
@Service
public class TaskAdministration {
@Autowired
private ApplicationContext appContext;
private final TaskAdministrationRepository taskAdministrationRepository;
public void commissionSystemTask(fields) {
SystemTask task = new SystemTask(trigger);
AutowireCapableBeanFactory factory = appContext.getAutowireCapableBeanFactory();
factory.autowireBean( task );
factory.initializeBean( task, "SystemTask" );
taskScheduler.schedule(task, task.trigger);
// persist task to restore if necessary
taskAdministrationRepository.save(task);
}
}
您需要在您的SpecificUserTask类上添加注释,就像组件一样。然后,当您使用Autowired时,您的SpecificUserTask将注入它的所有内容以及它的超类。
如果没有使用Spring的特定注释对对象进行注释,Spring对您的SpecificUserTask一无所知。
通过将一个bean的实例放置到另一个bean实例的字段中来实现自动连接。这两个类都应该是bean,并且应该“存在”于应用程序上下文中。
“活在”应用程序上下文中意味着上下文实例化了对象,而不是您,您永远不应该创建新的MyClass()。容器找到每个注入点并在那里设置一个实例。
因此,当您使用@Service
或@Component
等注释注释bean时,Spring会找到它们并实例化。
但我们只对其中一些答案感兴趣。 注意:以上只是展示结构的示例。每个映射都有几十个元素。 我们真正需要的是:https://github.com/pact-foundation/pact-specification/issues/38,但它是计划在V.4中使用的。与此同时,我们正在尝试一种不同的方法。我现在尝试做的是指定列表的每个元素都是一个非空映射。另一种方法是指定列表的每个元素都不为空。这些都可
问题内容: 我通过定义一个托管属性将一个托管bean注入另一个托管bean遇到了一些麻烦。我正在谷歌搜索和stackoverflow 3天,但没有结果… 我正在使用Eclipse 4.2进行开发并将其部署到集成的Tomcat 7中 那么,谁能告诉我,为什么我的财产为空? pom.xml web.xml 我已经在applicationContext中设置了可扫描@Autowired注释的bean。(
我正在从这里的教程中学习Java spring Boot 我一直得到“api.database.basic.apidatabase.models.TopicService中的字段topicRepository需要一个类型为'api.database.basic.apidatabase.interface.topicRepository'的bean,但找不到。” 我读到这个错误可能是因为compon
问题内容: 我的文凭项目有一个大问题,如果你们能帮助我,我将非常高兴!我做了一个Maven多模块项目,有3个“核心项目” :(父母) :包含所有的实体和接口域模型是由需要 和对 :将GUI和Hessian关联起来 :这里是我的仓库,我到数据库连接和接口的实现 和具有在Maven作为依赖。 现在,每次尝试在Tomcat上启动服务器时,都会出现以下错误: 模型库: 卡萨: MeinRemoteDien
问题内容: 当超类具有标记为final的字段但子类覆盖(隐藏?)此字段时,会发生什么?“最终”并没有阻止它,不是吗?我正在处理的特定示例是Building类,从中继承了各种建筑物。除其他事项外,每种类型的成本对于每个子类都应是最终成本,但是每种类型的建筑物应具有自己的成本。 编辑:从那以后,我意识到我不知道上面我在说什么。我真正想要的是成本的静态变量。但是,如果我在超类中声明这些静态变量,则它们对
问题内容: 我对Go之类的打字语言还是陌生的,并且正在尝试学习实现事物的最佳方法。 我有两个表示将插入到mongodb数据库中的模型的结构。一个结构(投资)具有另一个结构(组)作为其字段之一。 我遇到的问题是在投资模型中,不需要组。如果没有组,我认为最好不要将其插入数据库。在Go中处理这种数据库模型的最佳方法是什么? 问题答案: tl; dr :使用,如果您需要担心零值和null /未指定之间的差