java - 如何在应用程序上下文中注册现有的 bean,我从中得到的优势是什么?

标签 java spring

我是 Spring 的新手。我正在浏览 spring 文档,其中说我们可以在应用程序上下文中注册在 spring 容器外部创建的现有对象。我是这样做的

OutsideBean outsideBean = new OutsideBean();
ConfigurableApplicationContext applicationContext = 
    new ClassPathXmlApplicationContext("spring.xml");
// SpringBean is the bean which is defined in spring.xml
SpringBean springBean = applicationContext.getBean("springBean", SpringBean.class); 
ConfigurableListableBeanFactory configurableListableBeanFactory =
    applicationContext.getBeanFactory();
configurableListableBeanFactory.registerSingleton("outsideBean", outsideBean);

我这里有很多未解答的问题。

  1. 我上面的做法对吗?
  2. 即使它是正确的,这也是最好的方法吗?
  3. 如果我必须将一个 bean 注册为“原型(prototype)”怎么办?
  4. 通过在应用程序上下文中注册我的 bean,我从中获得的优势是什么?

我通读了 stackoverflow 中的许多链接,但无法理解。因此在新线程中询问它。

最佳答案

  1. 据我所知,是的
  2. 不,这不是最好的方法。最好的方法是从 Spring 配置类创建上下文,并使用 @Bean 注释方法在该配置类中创建 bean,如所述 in the documentation .或者简单地通过使用 @Component 注释您的类并让 Spring 通过类路径扫描找到您的 bean。
  3. 您指定一个范围using the @Scope annotation
  4. 优点是 bean 由 Spring 管理,因此可以由 Spring 注入(inject)到所有其他 bean 中。它也可以被任何其他 bean 注入(inject)。它可以从 AOP 中受益,例如,提供事务方法。

关于java - 如何在应用程序上下文中注册现有的 bean,我从中得到的优势是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29726618/

相关文章:

java - 在特定日期使用 (Spring @Scheduled) 运行作业

java - 如何自定义 Spring Boot 嵌入式 Tomcat 线程池?

java - 属性 'fixed-rate' 不允许出现在元素 'int:poller' 中

java - 点击更新按钮时捕获当前时间

Java 图形用户界面 : Sharing values across different JFrames

Java : Is the get method of an Arraylist cached?

java - 如何在 R 中加载 apache poi 库?

java - Java 中的对象锁定

java - @Valid @RequestBody 无法验证输入错误的传入 Json

java - JSON Map<String,ArrayList> 数据未转换为 Restful jersey 中的 bean 对象