【问题标题】:Correct use of the @Bean annotated method正确使用@Bean注解方法
【发布时间】:2016-09-08 08:58:35
【问题描述】:

@Bean注解用于为应用上下文创建bean,我们可以把逻辑放在里面创建一个对象。 但是我们可以在代码中的某个地方手动调用这个方法吗,其中正在创建的 bean 的引用不是自动装配的??? 我可以调用此方法,但这是一个好习惯吗?如果我这样称呼,那是否意味着我没有正确设计我的类依赖项??

有人可以分享他们对此的想法吗?

谢谢,

阿马尔

【问题讨论】:

  • 您是在问如何在 xml 或 java config 之外创建 Spring 托管 bean?
  • 不要从其他东西调用 @Bean 注释方法然后 @Configuration 类...
  • @RC。是的,可以说我正在调用一个方法。在那个方法里面,我需要那个bean,我可以在那里调用这个方法吗?
  • @M.Deinum "@Configuration" 也可以用于方法,对吗??我创建了 @Bean@Configuration public beanname() {return new ...;} 。我不太确定我写的是否正确
  • 不,这是不是的好习惯。与其手动调用@Bean 方法,不如更改您的代码,以便您可以在需要执行此操作的任何地方访问ApplicationContext,然后在ApplicationContext 中查找bean - 或者更好,让Spring 注入它。

标签: java spring


【解决方案1】:

你总是有两种选择:

  1. 基于注释
  2. 基于 XML

如果您出于任何原因不想使用@Autowired 注解,您可以使用ctx.getBean()。

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ctx.getBean("beanName");

你可以阅读这场冬青战争here

【讨论】:

    【解决方案2】:

    @Bean 注解创建一个 spring 托管 bean。要掌握它,请使用@Autowired。

    如果您需要访问某个无法自动装配的对象,那么通常您应该考虑重新设计您的代码。

    但如果您坚持,您要么必须手动创建对象,要么以编程方式从应用程序上下文中获取它。

    这样的事情应该可以工作:

    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    ctx.getBean("someName");
    

    【讨论】:

      猜你喜欢
      • 2013-11-06
      • 2015-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多