繁体   English   中英

如何在Spring注释中使用构建器模式

[英]How to use builder pattern with Spring annotation

我想在我的代码中消除太多的“新”创建。 因此,我决定使用构建器模式。 如果可能的话,我也想利用Spring @Autowired。

public class Car
{
    @Autowired
    private Radio radio;

    @Autowired
    private Speaker speaker;

    @Autowired
    private Engine engine;

    private String model;

    public Car createCar()
    {
        radio.add(speaker);
        return this;
    }

    public static class Builder
    {
        private String model;

        public Builder(){}

        public Builder model(String model)
        {
            this.model = model;
            return this;
        }
    }
}

我想使用类似这样的东西。

Car car = new Car.Builder().model("A123").build();

这可能吗?

好的,您可以使用类似的东西并进行一些基本更改。首先,使用默认的自动装配实例制作汽车和制造商,然后在此处更改示例,例如:

卡尔斯

public class Car {
    private Radio radio;
    private Speaker speaker;
    private Engine engine;

    public Car(Radio radio, Speaker speaker, Engine engine) {
        this.radio = radio;
        this.speaker = speaker;
        this.engine = engine;
    }

    public Radio getRadio() {
        return radio;
    }

    public void setRadio(Radio radio) {
        this.radio = radio;
    }

    public Speaker getSpeaker() {
        return speaker;
    }

    public void setSpeaker(Speaker speaker) {
        this.speaker = speaker;
    }

    public Engine getEngine() {
        return engine;
    }

    public void setEngine(Engine engine) {
        this.engine = engine;
    }
}

CarBuilder.class

@Component
public class CarBuilder {

    @Autowired
    private Radio radio;
    @Autowired
    private Speaker speaker;
    @Autowired
    private Engine engine;

    public CarBuilder setRadio(Radio radio) {
        this.radio = radio;
        return this;
    }

    public CarBuilder setSpeaker(Speaker speaker) {
        this.speaker = speaker;
        return this;
    }

    public CarBuilder setEngine(Engine engine) {
        this.engine = engine;
        return this;
    }

    public Car createCar() {
        return new Car(radio, speaker, engine);
    }

}

并在您的代码中使用构建器,如下所示

@Component
public class CarMarket {

    @Autowired
    private CarBuilder carBuilder;

    private Car buildStandardCar(){
        return carBuilder.createCar();
    }


    private Car buildStandardCarButDifferentRadio(Radio radio){
        return carBuilder.setRadio(radio).createCar();
    }

}

我希望这能帮到您 :)

我认为这应该工作:

@Component
    public class Car {
@Autowired
private Radio radio;
@Autowired
    private Speaker speaker;
@Autowired
    private Engine engine;  
private String model;
    }

然后是一个构建器类:

    @Component
    public class CarBuilder{
@Autowired
Car car;

public void addModel(String model){
this.car.setModel(model);
}

public Car getCar(){
return car;
}
}

然后上课

 class Main{

public static void main(String args[]){
     Car car= context.getBean("carBuilder").addModel("abc").getCar();
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM