Skip to content

Cepr0/sb-tagged-autowire-candidate-resolver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TaggedAutowireCandidateResolver

An example of custom implementation of Spring AutowireCandidateResolver

TaggedAutowireCandidateResolver is an implementation of AutowireCandidateResolver that makes it possible to get collections of injected Spring beans tagged by specified 'tags'. Tags are specified with @Tags annotation in style of @Qualifier annotation. Collection is formed from the beans that have the same type and the same tags as the autowired collection.

@Autowired
@Tags({"greeting", "other"})
private Map<String, Supplier<String>> greetingOrOther;

@Configuration
static class Beans {
   @Tags({"greeting", "2symbols", "even"})
   @Bean
   public Supplier<String> hi() {
      return () -> "hi";
   }

   @Tags({"parting", "2symbols", "even"})
   @Bean
   public Supplier<String> by() {
      return () -> "by";
   }

   @Tags({"greeting", "5symbols", "odd"})
   @Bean
   public Supplier<String> hello() {
      return () -> "hello";
   }

   @Tags({"parting", "7symbols", "odd"})
   @Bean
   public Supplier<String> goodbye() {
      return () -> "goodbye";
   }

   @Tags({"other", "5symbols", "odd"})
   @Bean
   public Supplier<String> other() {
      return () -> "other";
   }
}

Here Map greetingOrOther will have three Supplier<String> beans: hi, hello and other;

To make it work you have to register a CustomAutowireConfigurer bean in your application and provide it with TaggedAutowireCandidateResolver:

@Configuration
public class AutowireConfig {
   @Bean
   public CustomAutowireConfigurer autowireConfigurer(DefaultListableBeanFactory beanFactory) {
      CustomAutowireConfigurer configurer = new CustomAutowireConfigurer();
      beanFactory.setAutowireCandidateResolver(new TaggedAutowireCandidateResolver());
      configurer.postProcessBeanFactory(beanFactory);
      return configurer;
   }
}

More usage examples are in Test

This project is related to this SO post.

About

TaggedAutowireCandidateResolver - an example of Spring AutowireCandidateResolver

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages