亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以根據 @Autowire 的路徑變量來決定使用哪個 bean?

是否可以根據 @Autowire 的路徑變量來決定使用哪個 bean?

慕田峪9158850 2022-11-30 16:22:21
對我有幫助的是圍繞帶有以下標簽的插件:<build>    <pluginManagement>        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <version>3.8.1</version>            </plugin>            </plugins>    </pluginManagement></build>
查看完整描述

3 回答

?
DIEA

TA貢獻1820條經驗 獲得超2個贊

Animal您可以通過將它們設為列表來實例化所有類型的 bean 。前任:

@Autowired
List<Animal> animals;

這將自動裝配所有動物,您可以遍歷它們并以編程方式決定您需要哪一個。

雖然,我可能是錯的,但對于您的用例,我相信工廠設計模式更適合。您可以對AnimalFactory列表中的所有工廠進行抽象和自動裝配,然后應用某種策略模式以編程方式決定您將使用哪個工廠并返回該類型的新對象。


查看完整回答
反對 回復 2022-11-30
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

通過 beanName 從 Container 中獲取動物 bean;


@RestController

@RequestMapping(value="/animal")

public class AnimalController {


private final AnimalService animalService;


  @Autowired

  public AnimalController(AnimalService service) {

    animalService = service;

  }



  @GetMapping(value = "/{animal}/sound")

  public String animalSound(@PathVariable String animal) {

    return animalService.doSound(animal);

  }


AnimalService.java


public class AnimalService implements ApplicationContextAware {


private ApplicationContext applicationContext;


@Override

public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

    this.applicationContext = applicationContext;

}



public String doSound(String animalName) {

    Animal animal = applicationContext.getBean(animalName);

return animal.sound();

 }


}


查看完整回答
反對 回復 2022-11-30
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

您可以使用 spring.profiles.active 來做到這一點。一個配置文件加載狗,另一個配置文件加載貓。


  @Configuration

public class Configuration {


@Profile("dog")

  @Bean

  public Dog createDog() {

    return new Dog();

  }


@Profile("cat")

  @Bean

  public Cat createCat() {

    return new Cat();

  }

}

您可以像 java -jar myapp.jar --spring.profiles.active=dog 一樣啟動您的應用程序。


您可以嘗試的另一個選項是限定 beans 并使用帶有屬性變量的限定符,spring 可能會解決它。


@Service

public class AnimalService {


  @Qualifier("${choosen.animal}")

  @Autowired

  private Animal animal; 


  public String doSound() {

    return animal.sound();

  }

}    

}


查看完整回答
反對 回復 2022-11-30
  • 3 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號