春天@Autowired内喷射手工类的实例中的字段

alexandroid:

在我的项目,我惊讶地看到,春季(4.3)似乎试图自动装配的,即使他们是手动实例化类的依赖。

MyClass.java (注意龙目岛的注释):

@NoArgsConstructor
@AllArgsConstructor
public class MyClass {
    @Autowired
    private MyClassDependency dependency;
}

MyClassDependency.java 使用一个工厂方法,并没有Spring注解:

public class MyClassDependency {
    public static MyClassDependency create() { return new MyClassDependency(); }
}

Spring配置导致NoSuchBeanDefinitionException

@Configuration
public class SpringConfig {
    @Bean
    public MyClass myClass() {
        return new MyClass(MyClassDependency.create());
    }
}

提供了豆使得春节快乐:

@Configuration
public class SpringConfig {
    @Bean
    public MyClass myClass() {
        return new MyClass(); // let autowire inject dependencies
    }
    @Bean
    public MyClassDependency myClassDependency() {
        return MyClassDependency.create();
    }
}

这是一个巨大的惊喜给我。我想有配置......这是哪里的行为从/控制未来的更简单的第一个版本?(这是可能的,我错过了或者从一些依赖把它)。

PS:为了澄清,MyClass代码是超出了我的控制,但我可以改变Spring配置。我期待了解Spring如何拦截构造函数调用withing bean方法和构造函数是否可以用来代替。

persicsb:

问题如下:

  1. 你标注了@Autowired场 - 告诉春天,有一个依赖需要被注入有
  2. 你标注了@Bean的方法 - 这使返回值Spring的上下文。
  3. 当春天处理的@豆注释对象的返回值,它开始理线及其注释 - 并没有与注释,告诉Spring来注入依赖那里,即使该领域已分配值的字段。
  4. 春天试图在这里注入的依赖性,但这种依赖不会在Spring上下文存在,所以注射失败。

因此,有@Bean,但手动注入@Autowired依赖互相冲突,你现在可以理解,为什么 - 你不可注射自动装配Autowired豆手动!自动装配Autowired是一个注释,告诉他CI容器做一些工作注入。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章