当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Boot应用程序的主方法中正确初始化Bean?

朱啸
2023-03-14

我有以下配置类:

@Configuration
public class StartupConfig {

    private final Logger log = LoggerFactory.getLogger(this.getClass().getSimpleName());

    @PostConstruct
    public void init() {
        log.debug("Start up config initialized.");
    }

    @Bean
    public SchedulerService schedulerService() {

        return new SchedulerService();
    }
}

我希望能够从应用程序的主方法加载调度服务bean。像这样的东西:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.crm.config.StartupConfig;
import com.crm.service.SchedulerService;

@SpringBootApplication
@EnableCaching
public class Server {

    public static void main(String[] args) throws Exception {

        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.register(StartupConfig.class);
        context.refresh();

        SpringApplication.run(Server.class, args);

        SchedulerService schedulerService = (SchedulerService) context.getBean("schedulerService");
        schedulerService.start();
    }
}

schedulerService类具有一个自动连线的依赖项:

    @Service
    @Transactional
    public class SchedulerService {

        @Autowired
        private SchedulerTriggerJpaDao schedulerTriggerJpaDao;
        ...

下面是SchedulerTriggerJpa道的定义:

package com.crm.dao;

import java.util.Collection;

import javax.transaction.Transactional;

import org.springframework.data.jpa.repository.JpaRepository;

import com.crm.entity.SchedulerTrigger;

@Transactional
public interface SchedulerTriggerJpaDao extends JpaRepository<SchedulerTrigger, Integer> {

    public Collection<SchedulerTrigger> findByEnabledTrueAndDeletedFalse();

}

当我运行应用程序时,我得到以下错误:

线程“main”组织中出现异常。springframework。豆。工厂UnsatisfiedPendencyException:创建名为“schedulerService”的bean时出错:通过字段“SchedulerRiggerJPadao”表示的未满足的依赖关系;嵌套的异常是org。springframework。豆。工厂NoSuchBeanDefinitionException:没有类型为“com”的合格bean。客户关系管理。刀。SchedulerTriggerJpaDao'可用:至少需要1个符合autowire候选资格的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowired(required=true)}。springframework。豆。工厂注释。AutoWiredNotationBeanPostProcessor$AutoWiredFeldElement。在org上注入(autowirednotationbeanpostprocessor.java:588)。springframework。豆。工厂注释。注入元数据。在org上注入(InjectionMetadata.java:88)。springframework。豆。工厂注释。AutowiredNotationBeanPostProcessor。org上的后处理属性值(AutowiredNotationBeanpostProcessor.java:366)。springframework。豆。工厂支持AbstractAutowireCapableBeanFactory。org上的populateBean(AbstractAutowireCapableBeanFactory.java:1264)。springframework。豆。工厂支持AbstractAutowireCapableBeanFactory。org上的doCreateBean(AbstractAutowireCapableBeanFactory.java:553)。springframework。豆。工厂支持AbstractAutowireCapableBeanFactory。CreateJavaAbstractBean(CreateJavaAbstractBean:WireCapactory)

要正确初始化schedulerService bean,以便它也可以初始化SchedulerRiggerJPadao依赖项,我需要做哪些更改?


共有3个答案

王豪
2023-03-14

问题是您正在返回SchedulerService的新的实例,它不是由spring管理的。您正在将该类注释为@Service,但spring只管理@Inject和/或@Autowire注入的类。

督宏旷
2023-03-14

您的SchedulerRiggerJPadao只是一个接口。你需要

>

或者使用一些框架,根据您的接口为您生成Dao实现。例如,Spring数据JPA(http://projects.spring.io/spring-data-jpa/)

邵锐
2023-03-14

如果SchedulerRiggerJPadao类具有以下注释

@Repository

那么它应该被认为是豆子。

 类似资料:
  • 问题内容: 用RefluxJS异步初始化数据的正确方法是什么?是否有类似于AngularJS的解决方案,或者Flux的实现与此无关(路由器应该处理此职责)? 问题答案: 在应用程序的顶级组件中,使用方法(docs)触发获取数据的操作。最初渲染组件时将调用此方法。 例如:

  • 问题内容: 将log4j添加到我的应用程序后,每次执行我的应用程序时,都会得到以下输出: 看来这意味着缺少配置文件。此配置文件应位于何处,什么是良好的入门内容? 我使用纯Java开发桌面应用程序。因此没有网络服务器等… 问题答案: 默认情况下,在上查找名为或的文件。 您可以按照此处所述通过设置系统属性来控制它用来初始化自身的文件(查找“默认初始化过程”部分)。 例如: 将导致在类路径上查找名为的文

  • 问题内容: 要声明一个具有固定大小的空切片,最好这样做: 要么: 只想知道哪种方法是正确的。 问题答案: 您提供的两个选择在语义上是相同的,但是使用会导致内部调用 runtime.makeslice (Go 1.14)。 您还可以选择保留其值: 如Golang.org博客中所述: nil切片在功能上等效于零长度切片,即使它没有指向任何内容。它的长度为零,可以附加分配。 甲片段将然而入而空片将编组成

  • 要声明大小不固定的空切片,最好执行以下操作: 或: 只是想知道哪一个是正确的方法。

  • TLDR:我希望我的Spring Boot应用程序在启动时运行一些初始化代码。代码需要访问Spring bean和值。 我正在编写一个Spring Boot应用程序,它将同时使用来自队列的多条消息。为了做到这一点,它需要实例化多个消费者对象。Spring是否有一个好的方法来实例化相同类的可配置的实例数? 我考虑了下面的方法,但我觉得不对。这似乎是对注释的滥用,因为实例在构造后没有使用。有什么更好的

  • 我想不出如何使爆米花工作,如下所示:https://getbootstrap.com/docs/4.0/components/popovers/. 文档中提到了popover支持是一个插件,并且需要工具提示插件,所以我修改了我的要添加这两个,现在看起来如下所示: 我还没有找到任何关于引导插件概念的文档,所以上面关于和的两行来自搜索,不确定它们是否正确。 留档声明: Popovers是基于性能原因选