当前位置: 首页 > 知识库问答 >
问题:

是否可以使用在同一个@Configuration类中定义的@Resource实例?

西门高歌
2023-03-14

我有一个例子是这样的

other需要MyBean的实例,因此我创建了一个属性,并在创建和other时使用该属性

@Configuration 
public SomeClass {

     @Resource 
     private MyBean b;

     @Autowired
     Environment env;

     @Bean
     public MyBean myBean() {
         MyBean b = new MyBean();
         b.foo(env.getProperty("mb"); // NPE
         return b;
     }

     @Bean 
     public Other other() {
         Other o = new Other(o);
         return o;
     }
}

但在初始化MyBean对象时,我得到了NullPointerException,我想这是因为env属性还没有连线。

如果我不使用bean而直接使用方法,那么一切工作都很好。

@Configuration 
public SomeClass {

     @Autowired
     Environment env;

     @Bean
     public MyBean myBean() {
         MyBean b = new MyBean();
         b.foo(env.getProperty("mb"); // NPE
         return b;
     }

     @Bean 
     public Other other() {
         Other o = new Other(myBean());
         return o;
     }
}

是因为我在同一个@configuration类中定义了@bean吗?

共有1个答案

岳劲
2023-03-14

尽管这是一个有趣的概念问题,但Spring Java配置的方法是将所需的bean作为参数传递,这样就可以避免将bean自动作为配置类的字段。如果您的任何bean碰巧需要mybean实例,只需将其作为参数提供:

 @Bean 
 public Other other(MyBean myBean) {
     Other o = new Other(myBean);
     return o;
 }

从配置类中调用@beananotated方法也没有问题,就像您在第二个代码片段中所做的那样,因为它们被代理并缓存了,所以它们不会创建不必要的实例。但是,我倾向于遵循上面的代码,因为它允许开发人员快速了解所需的依赖关系。

话虽如此,对于您的具体问题,@autowired代替@resource起作用,但是在@configuration类中使用它们是没有意义的。只需使用局部方法参数。

 类似资料:
  • 我有一个注册程序,用户可以在餐厅预订餐桌。 因为我需要存储潜在的无限量的客户,所以我不能显式地创建Customer类的新实例,因为我需要能够在运行时添加它们。 我想过使用HashMap通过他们填写的注册表插入每个用户,但是,它不是保留每个客户的唯一值,而是用哈希图中的最新条目覆盖它们。 明确地说,键正在改变,它成功地添加了一个新的键,但是前一个键中的值被覆盖了 例子 类客户有 3 个设置器:设置

  • 问题内容: 是否可以在SQL中的另一个用户定义表类型(嵌套的用户定义表类型)中使用用户定义的表类型。 我有高级发送表中的行的数据表。 请帮助如何将表行中的表数据从 asp.net发送到sql 。通过循环还是有任何简单的方法将嵌套表数据发送到服务器。 问题答案: 不,为什么会这样?这不是SQL Server(或任何关系数据库)的工作方式。 从TechNet的“用户定义的表类型”页面上: 限制 用户定

  • 问题内容: Python 3.4引入了一个新模块,该模块向该语言添加了枚举类型。的文档提供了一个示例来演示如何扩展它: 此示例还演示了一个问题:在property方法中,定义了一个常量,该常量通常在类级别定义- 但是尝试在a级别内执行此操作只会将其添加为枚举的成员之一,因此,在方法内部定义。 如果该类想在其他方法中使用此常量,则也必须在其中定义它,这显然不是理想的选择。 有什么方法可以在中定义类常

  • 我刚开始使用Java,到处搜索,但无论出于何种原因都无法找到解决方案。我的问题对我来说似乎很简单:我在同一个文件夹中有两个类,该文件夹是我的包,为了说明: 我需要在第2类中创建第1类的实例,但它就是不起作用。这是一个示例: 文件路径: 文件路径: 我得到这个错误 根据要求,完整的源代码:注:class1=ClientIndividual,class2=涉众 第一个文件 第二个文件 第三个文件(接口

  • 目前,不允许在接口中使用get/set方法(访问器)。例如: 此外,TypeScript 不允许在类方法中使用数组函数表达式:例如: 有没有其他方法可以在接口定义上使用getter和setter?

  • 我有多个参数要引用,但我不想一个一个地指定它们。