标签:
@Qualifier 常出现在一个接口,多个实现类调用的情况下,在一些选择处理上,给出使用示例,体会此种妙处。
package spring; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import static spring.Spring.Platform; @Configuration @ComponentScan public class Spring { public static void main(String[] args) { new AnnotationConfigApplicationContext(Spring.class); } @Autowired @Platform(Platform.OperatingSystems.ANDROID) private MarketPlace android; @Autowired @Platform(Platform.OperatingSystems.IOS) private MarketPlace ios; @PostConstruct public void qualifyTheTweets() { System.out.println("ios:" + this.ios); System.out.println("android:" + this.android); } // the type has to be public! @Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Qualifier public static @interface Platform { OperatingSystems value(); public static enum OperatingSystems { IOS, ANDROID } } }
接口:
interface MarketPlace { }
实现类一:
@Component @Platform(Platform.OperatingSystems.IOS) class AppleMarketPlace implements MarketPlace { @Override public String toString() { return "apple"; } }
实现类二:
@Component @Platform(Platform.OperatingSystems.ANDROID) class GoogleMarketPlace implements MarketPlace { @Override public String toString() { return "android"; } }
标签:
原文地址:http://my.oschina.net/u/221951/blog/384038