Spring:@Bean仍可以在没有@Configuration的情况下工作

时间:2016-10-26 07:56:48

标签: spring

https://projects.spring.io/spring-framework/我有一个春天框架hellpworld计划。我删除了注释@Configuration。但是程序仍然可以像以前一样运行。为什么?这里的@Configuration角色是什么?

2 个答案:

答案 0 :(得分:8)

您仍然可以使用@Component标记该类,以便@Bean实例可用于编程。当你这样做时,它被称为精简模式。在这种模式下,您不能使用“bean间引用”,意味着通过方法引用其他实例。

另一方面,带有@Configuration类的@Bean包含在side cglib包装器中,可以拦截对这个bean方法的任何调用,并且可以从上下文返回bean实例。意味着你可以使用'bean间引用'。

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/Bean.html

  1. @Configuration类中的@Bean方法
  2.   

    通常,@ Node方法在@Configuration类中声明。   在这种情况下,bean方法可以引用其中的其他@Bean方法   同一个班直接打电话给他们。这确保了引用   bean之间是强类型和可导航的。这样所谓   “bean间引用”保证尊重范围和AOP   语义,就像getBean()查找一样。这些是语义   从最初的'Spring JavaConfig'项目中了解到它需要   CGLIB在运行时子类化每个这样的配置类。作为一个   结果,@ Configuration类和它们的工厂方法一定不能   在此模式下被标记为最终或私人。

    • @Bean Lite Mode
      

    @Bean方法也可以在不是的类中声明   用@Configuration注释。例如,bean方法可能是   在@Component类中声明,甚至在普通的旧类中声明。在这样的   在这种情况下,@Bean方法将以所谓的'lite'模式处理。

         

    lite模式下的Bean方法将被视为普通工厂方法   容器(类似于XML中的工厂方法声明),with   正确应用范围和生命周期回调。包含类   在这种情况下保持不变,并且没有不寻常的限制   对于包含类或工厂方法。

         

    与@Configuration中bean方法的语义相反   在lite模式下不支持类,'bean间引用'。   相反,当一个@ Bean方法在lite中调用另一个@ Bean方法时   模式,调用是标准的Java方法调用;春天呢   不通过CGLIB代理拦截调用。

    和, @Configuration使您能够结合其他注释使用许多其他功能

    导入其他配置 @Import(DatabaseConfig.class)

    资源导入@PropertySource(“classpath:config.properties”)

    启用组件扫描@ComponentScan(basePackages = {“com.sample。*”})

    标记配置文件@Profile(“production”)

    启用功能@​​Enablexxxx

    http://docs.spring.io/spring-framework/docs/4.0.4.RELEASE/javadoc-api/org/springframework/context/annotation/Configuration.html

答案 1 :(得分:0)

我正在使用没有Spring Boot的Spring Framework 4.3.17.RELEASE。

ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);

未对AppConfig进行注释@configuration

@ComponentScan(basePackages={"tn.esprit.repository", "tn.esprit.service", "tn.esprit.conf"})
@Import(DataConf.class)
@EnableTransactionManagement
//@Transactional
public class AppConfig {

@ComponentScan@import在没有@configuration的情况下效果很好。 有什么解释吗?这是针对4.3版本的吗?