public interface CompactDisc {
void play()
}
public class HybridTheory implements CompactDisc { }
public class Meteora implements CompactDisc { }
public class myTest {
@Autowired
private CompactDisc cd;
}
当您遇到有多个实现相同接口的情况时,可以采取的方法很少。
1.使用@Qualifier注释
如果使用类路径扫描,您的类可能如下所示:
@Component
public class HybridTheory implements CompactDisc { }
@Component
public class Meteora implements CompactDisc { }
@Service
class Player {
private final CompactDisc compactDisc;
// note that starting from Spring 4.3
// you can omit @Autowired annotation from constructor
Player(@Qualifier("hybridTheory") CompactDisc compactDisc) {
this.compactDisc = compactDisc;
}
}
@Component
@Primary
public class HybridTheory implements CompactDisc { }
每当Spring发现有多个bean匹配注入点时,它就会注入用@primary注释的那个bean。注意,如果在注入点中使用@primary和实现接口注释了多个bean,那么问题仍然存在。
3.使用Java配置
尽管@qualifier和@primary解决了这个问题,但有时您可能会发现,要了解注入了哪个实现,您需要大量遍历源代码。有时更干净的方法是从类中删除@component(或其他构造型注释),并使用Java配置声明bean:
public class HybridTheory implements CompactDisc { }
public class Meteora implements CompactDisc { }
@Configuration
class RecordsConfiguration {
@Bean
CompactDisc hybridTheory() {
return new HybridTheory();
}
@Bean
CompactDisc meteora() {
return new Meteora();
}
@Bean
Player player() {
return new Player(meteora());
}
}
我对Spring bean扫描有点困惑。 AFAIK我需要把
豆豆Pool — GOLANG简单的工作池 本repo是一个简单的golang工作池,仅供交流和学习使用。golang工作池的作用是可以限制goroutine的启动数量。 use //NewTask是放到工作池当中运行的函数。使用的时候需要先实例化他 w := pool.NewTask(func() error { fmt.Println(time.Now());return nil })
我还没有找到一个我能理解的spring豆的高级定义。我经常在Grails文档和书籍中看到它们,但我认为理解它们是什么将是有益的。那么什么是spring豆呢?如何才能利用它们呢?它们和依赖注入有关系吗?
我目前对Spring的@Async和单例Bean如何处理并发请求之间的区别感到非常困惑。 我已经阅读了一个非常有见地的解释问题(单例Bean如何服务于并发请求?)。但是我想根据第二个答案进一步扩展。 答案是"简而言之,无状态单例将能够同时服务两个请求,因为它们位于不同的线程中。" 如果这是真的,那么Spring的@Async的意义是什么,Spring的教程(https://spring.io/gu
我在项目中使用了Spring、Cucumber和Junit。测试运行程序带有注释,因此在运行套件之前,它会创建一个Spring上下文。 我希望Spring将步骤定义类实例化为Springbean,这样我就可以注入依赖项并在步骤中使用它们。可以通过将类声明为来完成。 到现在为止,一直都还不错。问题是Cucumber将再次实例化步骤定义,并且不会使用Spring已经创建的bean和注入的依赖项。 有什
我试图在tomcat 9上部署我的应用程序,但在部署过程中,我面临以下异常 依赖关系.gradle 如下所示 注意:相同的应用程序正在weblogic 12上成功运行。