Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果一个bean在另一个配置中而没有autowire,如何将它的属性设置为另一个bean?_Java_Spring_Dependency Injection - Fatal编程技术网

Java 如果一个bean在另一个配置中而没有autowire,如何将它的属性设置为另一个bean?

Java 如果一个bean在另一个配置中而没有autowire,如何将它的属性设置为另一个bean?,java,spring,dependency-injection,Java,Spring,Dependency Injection,在@Autowire的帮助下,可以从另一个配置中的bean设置属性 是否可以在基于Java的配置代码中执行等效赋值 样本如下 它输出: instance1.instance2 = com.inthemoon.snippets.springframework.InterconfigSettingTry$Bean2@574b560f instance1.instance3 = null 这证明,该属性是在配置之间自动连接的 示例包含注释,解释了我希望在何处分配属性而不是@Autowired: pu

@Autowire
的帮助下,可以从另一个配置中的bean设置属性

是否可以在基于Java的配置代码中执行等效赋值

样本如下

它输出:

instance1.instance2 = com.inthemoon.snippets.springframework.InterconfigSettingTry$Bean2@574b560f
instance1.instance3 = null
这证明,该属性是在配置之间自动连接的

示例包含注释,解释了我希望在何处分配属性而不是
@Autowired

public class InterconfigSettingTry {


   // first bean class with two properties, one of which is set with autowire, while another does not
   public static class Bean1 {

      @Autowired
      public Bean2 instance2;

      // @Autowired // not using autowire feature
      public Bean2 instance3;

   }

   // second bean class, which will be instantiated in two beans
   public static class Bean2 {
   }

   // java based configuration #1, which contains a bean, wishing to be aware of two beans in another config
   @Configuration
   public static class _Config1 {

      @Bean
      public Bean1 instance1() {

         Bean1 ans = new Bean1();

         // how to set ans.instance3 here without autowire?
         //ans.instance3 = ???

         return ans;
      }


   }

   // java based configuration #2
   @Configuration
   public static class _Config2 {
      @Bean
      public Bean2 instance2() {
         return new Bean2();
      }

      @Bean
      public Bean2 instance3() {
         return new Bean2();
      }
   }

   // main method 
   public static void main(String[] args) {

      ApplicationContext context = new AnnotationConfigApplicationContext(_Config1.class, _Config2.class);

      Bean1 instance1 = (Bean1) context.getBean("instance1");

      System.out.println("instance1.instance2 = " + instance1.instance2);
      System.out.println("instance1.instance3 = " + instance1.instance3);

   }

}

听说过setter方法吗。。。创建一个,在你对bean1的定义中调用它。。。但是如果他们知道,为什么要分开配置或者不使用自动配置呢?请建议setter方法,它可以解决这个问题。单独配置是一个先决条件。那么我仍然不明白为什么您不能使用
@Autowired
这有什么问题?接下来,如果这些是必需的依赖项,我将使用构造函数注入,而不是带有setter的字段。在您当前的方法中,您可以创建一个无效的
Bean1
实例。我想了解一下,从Java配置
@Configuration
中还可以做些什么,这是一个
@组件
,因此它只是一个普通的bean(应用了一些魔法,但仍然是一个bean)。您在类中放置了一个字段,并在其上添加了
@Autowired