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

带有AnnotationConfigApplicationContext的Java@Component类和

陶博涉
2023-03-14

我在下面创建了AppConfig.java,没有@configuration注释。

public class AppConfig {

   @Bean(name="sampleService")
   public SampleService getSampleService(){
       return new SampleService();
   }

}

将这个类作为我的java配置类传递给AnnotationConfigApplicationContext,它接受并注册了我的服务bean。

我对上面相同的AppConfig做了一些修改,如下所示。

  @Component
  public class AppConfig {

     @Bean(name="sampleService")
     public SampleService getSampleService(){
          return new SampleService();
     }
  }

共有1个答案

空佐
2023-03-14

@组件

指示带注释的类是“组件”。

也就是说,在启用组件扫描的上下文中,Spring为@component注释类型生成bean定义。这些bean定义最终被转换为bean。

@configuration,它本身用

指示一个类声明一个或多个@bean方法,并且可以由Spring容器处理以在运行时为这些bean生成bean定义和服务请求,[...]

因此,Spring为其生成bean的任何@configuration类型都充当bean的工厂。

@bean的javadoc状态

因此,@bean方法在@configuration注释类中具有全部功能,在@component注释类中具有有限功能。

为什么即使没有@configuration注释它也接受?

类就是这样设计的。applicationcontextBeanFactoryAnnotationConfigApplicationContext提供了一种注册bean定义的额外方法。

 类似资料:
  • 问题内容: 我一直在努力使getResource在整个上午正常工作,但是到目前为止,我必须使其正常工作的唯一方法是将res文件夹移到bin文件夹,然后像这样使用getResource 但是我有没有办法使res不在bin文件夹中? 问题答案: 没关系,我真不敢相信那是多么愚蠢的修复。 我将res文件夹添加到主项目文件夹而不是bin中,然后进入eclipse 运行>运行配置>类路径>选择用户条目>高级

  • 问题内容: 我已经在程序中hibernate了带注释的类。由于我正在运行Spring项目,因此已将它们包含在servlet.xml文件中(com.student.dto是实际的包名称),并在Contacts实体上添加了@Component。是否有一种方法可以自动添加@Component在所有hibernate类上。每次创建模型时,我最终都会这样做,并且觉得应该做得更好。 问题答案: 你做错了一切。

  • 我是Spock框架的新手,在使用抽象java测试类时遇到了问题。 我想要的是一个groovy测试类,它用一些常用的方法扩展一些其他java抽象类,这些方法反过来扩展规范类。 当我运行GroovyTest类时,我得到以下错误: Org.SpockFramework.Runtime.InvalidSpecException:规范“org.my.package.AbstractTest”未正确编译(Sp

  • 问题内容: 我在尝试使用定义上下文层次结构时遇到问题。 问题是在内部定义模块上下文并使用另一个上下文(基于XML / Annotated)设置’parent’属性时。 例: 模块A中的beanRefContext.xml db-context.xml 模块B中的beanRefContext.xml 冬眠道 模块B应用程序上下文无法找到在模块A应用程序上下文中定义的bean。 从代码看,扫描过程似乎

  • 我试图在freemarker上执行宏,但在实现css类作为参数时遇到了问题。我的对象有一些默认的css类,我想添加可选类。 第2行)只呈现“id”参数。如果我删除了宏的class="ui-按钮",那么它将正确呈现。 我能做什么来呈现两个或更多的类参数???