【问题标题】:Can we change @Component name runtime / dynamically我们可以更改@Component 名称运行时/动态
【发布时间】:2021-11-16 17:26:21
【问题描述】:
public abstract class Vehicle{
    private String vehicleName;
    
    public class Vehicle(String vehicleName){
        this.vehicleName = vehicleName;
    }

    public void drive();
}

@Component("Car")
public class Car implements vehicle(){
    
   public Car(String carName){
       super(carName);
   }

}

在这里,我的要求是我想动态设置对象名称,即按照上面的代码,我对 Car 类的引用将转到我传递给 @Component 的名称strong>,我希望 Car 类的引用是 Car 类的 carName 属性。

请建议是否可能。

注意 - 我不希望 @Component 名称来自任何属性文件,我希望它来自我现有的汽车对象。

【问题讨论】:

  • 不,你不能。还有目的是什么?还有为什么Car 甚至是一个组件...
  • 您不能在运行时更改组件名称。你可以使用 FactoryBeans,但我不确定你想用你的代码完成什么,所以让我问一下:你能补充一些细节吗?在这种情况下,您想解决什么问题?
  • 你的用例到底是什么?
  • 您可以使用您选择的名称将 bean 动态添加到 Spring。见stackoverflow.com/questions/4540713/…

标签: java spring spring-boot ioc-container spring-annotations


【解决方案1】:

根据您的示例,简短的回答是“否”。

您需要了解的是@Component 将创建一个单例bean,它将在应用程序上下文启动时进行初始化(除非您懒惰地初始化它)。因此,您无法真正随时创建 spring bean。

还要注意,这些单例 bean 应该是 stateless(它们拥有的唯一状态是共享状态)。

由于您没有提供您的真正要求,我建议您查看此bean scope 文档。它可能对你有用。干杯!

【讨论】:

    【解决方案2】:

    @Component 是检测自定义bean,在你的其中注册以Car为名称的组件,因此它成为一个引用,你不允许在运行时更改组件名称。

    【讨论】:

      【解决方案3】:

      “@Component”是一个 Spring 概念,用于为另一个(以及其他)Spring Bean 创建可重用和可注入的组件。

      它不应该用于 POJO。

      【讨论】:

      • 我认为他只是在学习一些教程,似乎他并没有将课程视为pojo。
      猜你喜欢
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多