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

ApplicationContext是否在spring中自动实例化?

孔经武
2023-03-14

ApplicationContext是否在spring中自动实例化?

如果像这样定义bean

@Component
public class Car{
   ...
}

然后我有了我的config类,它告诉spring容器在哪里通过注释@ComponentScan查找bean

@Configuration
@ComponentScan
public class AppConfig {
   ...
}

spring正在自动创建一个上下文,加载我所有的bean吗?还是我必须以编程方式创建它?如果是这样,我该怎么做,用这样的东西?

@Configuration
@ComponentScan
public class AppConfig {
   ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
   context.getBean(Car.class);
   ...
}

即使这样做,也可能会有一个问题,因为每次我需要上下文时都必须调用新的AnnotationConfigApplicationContext...有什么推荐的方法来实例化上下文,使他在整个项目中可用,也许像spring boot应用程序中的bean一样,我可以自动生成它。

spring boot如何初始化它,加载所有bean并让上下文作为bean可用,准备好自动连线?

共有1个答案

唐煜
2023-03-14

不,如果您有一个简单而基本的spring核心应用程序,应用程序上下文不会自动实例化。此外,如果您不使用@Configuration类显式地创建spring容器/上下文,您的@configuration类将不会扫描任何内容,也不会创建任何bean。

有几种创建应用程序上下文的方法,但最流行和最传统的是:

  • applicationcontext context=new ClassPathXmlApplicationContext(applicationcontext.xml)-暗示您的容器配置在applicationcontext.xml文件中;
  • applicationcontext context=new AnnotationConfigApplicationContext(configClass.class);-暗示您的configClass@configuration类。

但是,如果您有用@springbootapplication注释的spring boot应用程序,那么应用程序上下文将自动为您实例化,因为:

@springbootapplication注释由以下内容组成:

  • @enableAutoConfiguration-启用spring boot的自动配置机制;
  • @componentscan-在应用程序所在的包上启用@component扫描;
  • @configuration-允许在上下文中注册额外的bean或导入额外的配置类。

这会给你带来更多的线索。

您可以通过main方法中的factory方法获得对spring boot创建的spring上下文的引用:SpringApplication.run(mainclass.class,args);

这将返回对应用程序上下文的引用,您可以将其分配给变量,如下所示:

ApplicationContext context = SpringApplication.run(MainClass.class, args)
 类似资料:
  • 我有一个JSF2.0+Spring项目,当我尝试将Spring bean自动集成到JSF bean中时,会遇到一些奇怪的事情。以下是我的ApplicationContext示例: 下面是我的jSF bean的一部分: 部署运行成功,但在我的jsf bean autowired属性映射中,第一个条目是正常的,就像我在applicationContext中配置的一样,但还有很多其他条目被放入map中。

  • Selenium FindBy注释是否实际实例化了WebElement实例,如果是,使用它们的框架的内涵是什么? 我在我的页面对象中所做的事情现在看起来是这样的。我的所有测试框架方法都将定位器作为参数(而不是WebElement实例)。 我的问题是,在类实例化时使用FindBy实例化WebElement实例吗?如果是这样,那么我怀疑我的框架方法需要使用WebElement实例。这是正确的吗,在框架

  • 我有一个Spring。xml文件,其中列出了所有bean定义,其中我列出了使用bean的所有依赖项、指定的messageSource、dataSource等。此外,我还有一个类ApplicationContext类,其中iam使用上下文获取所有bean。代码为: 我有一个Dao类,其中applicationContext用于访问JDBCtemplate相关bean。我现在必须使用spring MV

  • 我正在按照YouTube的教程来构建一个spring boot应用程序。这个人使用的是lombok,所以他在类的任何字段上都没有注释,他的代码工作得很好。然而,当我尝试相同的操作时,控制台显示服务为空。 适当的代码和输出截图附上以供参考。 }

  • 我正在尝试使用简单的spring启动应用程序。我在ApplicationContext上启动应用程序时遇到问题。 2017-04-26 11:17:31.101警告14528---[main]s.c.a.AnnotationConfigApplicationContext:上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂未满足的PendencyExcepti

  • 问题内容: 您需要显式创建索引,还是在定义主键时隐式创建索引?MyISAM和InnoDB的答案是否相同? 问题答案: 主键始终被索引。对于MyISAM和InnoDB,这是相同的,并且通常对所有支持索引的存储引擎都是如此。