基于Java和基于注释的配置/自动装配

时间:2017-01-12 13:58:00

标签: spring

当我使用Spring框架时,我经常会看到2个基于java和基于注释的配置/自动装配术语。

基于Java的基于注释的配置/自动装配是不同的还是一个?

如果它们不同,你能告诉我它们之间有什么不同吗?

4 个答案:

答案 0 :(得分:4)

它们相似,但有细微差别。

不要在类上使用@Component注释(这是基于注释的配置),而是可以跳过@Component,而是使用@Bean注释方法返回此类的新实例。(这是Java-基于配置)。

对于最简单的应用程序,它没有什么区别,但它会影响诸如“查找方法注入期间的动态子类化”之类的内容,如果你在抽象方法上有@Lookup注释,Spring会自动执行魔术并覆盖此抽象返回@Component注释bean的方法。

Spring不能为引用@Bean bean的方法执行此自动子类化。在这种情况下,您需要使用自己的子类手动覆盖该方法。

您可以在Spring参考中找到基本代码示例。 https://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-factory-lookup-method-injection

答案 1 :(得分:4)

基于Java的配置:

  

官方Spring文档指的是使用带有@Configuration注释的Java类配置bean,并将@Bean方法包含为Java配置'。这使您可以完全免除应用程序中的所有XML(至少就Spring而言)。这种支持在Spring 3.0中添加,并且功能更强大。

     

Source

换句话说,不需要配置文件。如果您的应用程序一切正常。

基于注释的配置:

  

从Spring 2.5开始,可以使用注释配置依赖注入。因此,不是使用XML来描述bean连接,而是可以通过在相关的类,方法或字段声明上使用注释将bean配置移动到组件类本身。

     

Source

换句话说,还有XML配置文件,但bean连线是使用注释配置的 注意:注释注入是在XML注入之前执行的。因此,对于通过两种方法连接的属性,后一种配置将覆盖前者 注意:默认情况下,Spring容器中未打开注释接线。因此,我们可以使用基于注释的连接,我们需要在Spring配置文件中启用它。

答案 2 :(得分:1)

以下是基于注释和基于java的配置之间的区别,可能会帮助您找到答案。

1.Xml配置:

a)在基于xml的配置中,您可以在xml文件中定义bean定义/依赖项注入/自动连接。

b)如果您只想在XML文件中提供bean定义并且为了休息,您想要使用注释,那么您必须在XML文件中定义context:annotation-config

c)如果您只想对所有内容使用注释,那么您必须在XML文件中定义context:component-scan

2.基于Java的配置:如果你想使用基于java的配置,那么你必须在你的类上使用@Configuration注释来加载容器。现在bean定义,你可以用两个。

a)在您的配置类@Bean注释工厂方法,您可以使用new关键字为您提供bean对象。

example-

 @Bean 
   public HelloWorld helloWorld(){
      return new HelloWorld();
   }

b)@Component / @Service / @Repository / @Controller / @RestController覆盖您想要充当bean的类。

答案 3 :(得分:-1)

有两种配置Spring的方法。一种是为Java代码添加注释。这是基于java的,这是基于注释的,它是自动装配的。 所以基于java和基于注释是一回事。

另一种方法是使用xml文件配置Spring。

使用哪个是讨论问题Xml configuration versus Annotation based configuration