为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以根据 @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条经验 获得超3个赞

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 关注
  • 210 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号