Merge pull request #10560 from vishal1023/origin/BAEL-4785
Origin/bael 4785
This commit is contained in:
		
						commit
						cbd6ad341f
					
				| @ -0,0 +1,5 @@ | ||||
| package com.baeldung.springbean.naming.component; | ||||
| 
 | ||||
| public interface Animal { | ||||
|     String name(); | ||||
| } | ||||
| @ -0,0 +1,14 @@ | ||||
| package com.baeldung.springbean.naming.component; | ||||
| 
 | ||||
| import org.springframework.beans.factory.annotation.Qualifier; | ||||
| import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| @Component | ||||
| @Qualifier("cat") | ||||
| public class Cat implements Animal { | ||||
| 
 | ||||
|     @Override | ||||
|     public String name() { | ||||
|         return "Cat"; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,7 @@ | ||||
| package com.baeldung.springbean.naming.component; | ||||
| 
 | ||||
| import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| @Component("myBean") | ||||
| public class CustomComponent { | ||||
| } | ||||
| @ -0,0 +1,13 @@ | ||||
| package com.baeldung.springbean.naming.component; | ||||
| 
 | ||||
| import org.springframework.beans.factory.annotation.Qualifier; | ||||
| import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| @Component | ||||
| @Qualifier("dog") | ||||
| public class Dog implements Animal { | ||||
|     @Override | ||||
|     public String name() { | ||||
|         return "Dog"; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,14 @@ | ||||
| package com.baeldung.springbean.naming.configuration; | ||||
| 
 | ||||
| import com.baeldung.springbean.naming.service.AuditService; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| 
 | ||||
| @Configuration | ||||
| public class AuditConfiguration { | ||||
| 
 | ||||
|     @Bean | ||||
|     public AuditService audit() { | ||||
|         return new AuditService(); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,19 @@ | ||||
| package com.baeldung.springbean.naming.configuration; | ||||
| 
 | ||||
| import com.baeldung.springbean.naming.component.CustomComponent; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| 
 | ||||
| @Configuration("configuration") | ||||
| public class MyConfiguration { | ||||
| 
 | ||||
|     @Bean("qualifierComponent") | ||||
|     public CustomComponent component() { | ||||
|         return new CustomComponent(); | ||||
|     } | ||||
| 
 | ||||
|     @Bean("beanComponent") | ||||
|     public CustomComponent myComponent() { | ||||
|         return new CustomComponent(); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,12 @@ | ||||
| package com.baeldung.springbean.naming.controller; | ||||
| 
 | ||||
| import com.baeldung.springbean.naming.service.MessagingService; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Controller; | ||||
| 
 | ||||
| @Controller | ||||
| public class MessagingController { | ||||
| 
 | ||||
|     @Autowired | ||||
|     private MessagingService service; | ||||
| } | ||||
| @ -0,0 +1,4 @@ | ||||
| package com.baeldung.springbean.naming.service; | ||||
| 
 | ||||
| public class AuditService { | ||||
| } | ||||
| @ -0,0 +1,7 @@ | ||||
| package com.baeldung.springbean.naming.service; | ||||
| 
 | ||||
| import org.springframework.stereotype.Service; | ||||
| 
 | ||||
| @Service | ||||
| public class LoggingService { | ||||
| } | ||||
| @ -0,0 +1,4 @@ | ||||
| package com.baeldung.springbean.naming.service; | ||||
| 
 | ||||
| public interface MessagingService { | ||||
| } | ||||
| @ -0,0 +1,14 @@ | ||||
| package com.baeldung.springbean.naming.service; | ||||
| 
 | ||||
| import com.baeldung.springbean.naming.component.CustomComponent; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.beans.factory.annotation.Qualifier; | ||||
| import org.springframework.stereotype.Service; | ||||
| 
 | ||||
| @Service | ||||
| public class MessagingServiceImpl implements MessagingService { | ||||
| 
 | ||||
|     @Autowired | ||||
|     @Qualifier("qualifierComponent") | ||||
|     private CustomComponent customComponent; | ||||
| } | ||||
| @ -0,0 +1,26 @@ | ||||
| package com.baeldung.springbean.naming.service; | ||||
| 
 | ||||
| import com.baeldung.springbean.naming.component.Animal; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.beans.factory.annotation.Qualifier; | ||||
| import org.springframework.stereotype.Service; | ||||
| 
 | ||||
| @Service | ||||
| public class PetShow { | ||||
| 
 | ||||
|     @Autowired | ||||
|     @Qualifier("dog") | ||||
|     private Animal dog; | ||||
| 
 | ||||
|     @Autowired | ||||
|     @Qualifier("cat") | ||||
|     private Animal cat; | ||||
| 
 | ||||
|     public Animal getDog() { | ||||
|         return dog; | ||||
|     } | ||||
| 
 | ||||
|     public Animal getCat() { | ||||
|         return cat; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,65 @@ | ||||
| package com.baeldung.springbean.naming; | ||||
| 
 | ||||
| import com.baeldung.springbean.naming.component.Cat; | ||||
| import com.baeldung.springbean.naming.component.Dog; | ||||
| import com.baeldung.springbean.naming.service.PetShow; | ||||
| import org.junit.jupiter.api.BeforeEach; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.junit.jupiter.api.extension.ExtendWith; | ||||
| import org.springframework.context.annotation.AnnotationConfigApplicationContext; | ||||
| import org.springframework.test.context.junit.jupiter.SpringExtension; | ||||
| 
 | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
| import static org.junit.jupiter.api.Assertions.assertNotNull; | ||||
| 
 | ||||
| @ExtendWith(SpringExtension.class) | ||||
| public class SpringBeanNamingUnitTest { | ||||
| 
 | ||||
|     private AnnotationConfigApplicationContext context; | ||||
| 
 | ||||
|     @BeforeEach | ||||
|     void setUp() { | ||||
|         context = new AnnotationConfigApplicationContext(); | ||||
|         context.scan("com.baeldung.springbean.naming"); | ||||
|         context.refresh(); | ||||
|     } | ||||
| 
 | ||||
|     // To name a bean spring gets the class name and converts the first letter to lowercase. | ||||
|     // Default naming strategy of the spring bean which is using class level annotation | ||||
| 
 | ||||
|     @Test | ||||
|     void givenLoggingServiceBeanIsCreated_whenThereIsNoValueProvided_thenBeanNameShouldBeDefaultName() { | ||||
|         assertNotNull(context.getBean("loggingService")); | ||||
|     } | ||||
| 
 | ||||
|     // In this case, to name a bean spring gets the class name and converts the first letter to lowercase. | ||||
|     @Test | ||||
|     void givenAuditServiceBeanIsCreatedWithMethodLevelAnnotation_whenThereIsNoValueProvided_thenBeanNameShouldBeTheNameOfMethod() { | ||||
|         assertNotNull(context.getBean("audit")); | ||||
|     } | ||||
| 
 | ||||
|     // spring will create the bean of type CustomComponent with the name "myBean". | ||||
|     // As we're explicitly giving the name to the bean, spring will use this name to refer to it. | ||||
|     @Test | ||||
|     void givenCustomComponentBeanIsCreate_whenThereIsCustomNameGivenToBean_thenBeanShouldBeIdentifiedByThatName() { | ||||
|         assertNotNull(context.getBean("myBean")); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     void givenCustomComponentBeanIsCreated_whenCustomNameIsGivenOnMethodLevelAnnotation_thenBeanShouldBeIdentifiedByThatName() { | ||||
|         assertNotNull(context.getBean("beanComponent")); | ||||
|         assertNotNull(context.getBean("configuration")); | ||||
|         assertNotNull(context.getBean("qualifierComponent")); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     void givenMultipleImplementationsOfAnimal_whenFieldIsInjectedWithQualifiedName_thenTheSpecificBeanShouldGetInjected() { | ||||
|         PetShow petShow = (PetShow) context.getBean("petShow"); | ||||
| 
 | ||||
|         assertNotNull(context.getBean("cat")); | ||||
|         assertNotNull(context.getBean("dog")); | ||||
| 
 | ||||
|         assertThat(petShow.getCat().getClass()).isEqualTo(Cat.class); | ||||
|         assertThat(petShow.getDog().getClass()).isEqualTo(Dog.class); | ||||
|     } | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user