@Autowired属性需要实例化参数

时间:2018-01-05 20:27:56

标签: java spring spring-boot autowired

我是初次启动的新手,我需要知道如何在需要实例化参数的属性中使用@autowired。 请记住以下说明性情况。它会是这样的:

public class MyClassA{

public SpecificClass myMethod(){
//some logic
}

}

public class MyClassB extends MyClassA{

@Autowired
MyComponent myComponent (myMethod()); //here is my doubt, because my component needs a parameter to be built

}

@Component
public class MyComponent{
public MyComponent(SpecificClass foo){
this.foo=foo;
}

2 个答案:

答案 0 :(得分:1)

如果你的目的是使用依赖注入,这不是真正合适的设计。不应该像这样直接依赖于超类的方法。按照你应该的方式间接注入依赖关系会产生类似下面的内容

GET /restapi/v2/accounts/<accountId>/envelopes/<envelopeId>/documents/101275804

答案 1 :(得分:1)

@Autowired只告诉Spring将组件注入构造函数,字段或方法参数。在此之前,注入的组件由bean容器实例化。我假设你正在寻找的是一种创建MyComponent的方式,它也会接收一个Spring Bean。 在您的示例中,您可以使用以下

实现此目的
@Configuration
public class MyClassA{

    @Bean //the bean would have the name 'myMethod', so maybe change that
    public SpecificClass myMethod(){
        //some logic
    }

}

//this needs to be a component, service, ...
@Component
public class MyClassB {

    @Autowired
    MyComponent myComponent;
}

@Component
public class MyComponent{

    @Autowired //Spring wires the Bean 'myMethod' in here, autowired is not needed in the latest Spring Versions
    public MyComponent(SpecificClass foo){
        this.foo=foo;
    }
}

这是一个基本的Spring问题,并不是特定于Spring Boot。为了更好地理解布线,您可以查看Spring 4 Framework Reference Documentation