BAEL-2921 Understanding getBean
This commit is contained in:
parent
44fb9946c7
commit
07b49e32c2
|
@ -0,0 +1,22 @@
|
||||||
|
package com.baeldung.getbean;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
class AnnotationConfig {
|
||||||
|
|
||||||
|
@Bean(name = {"tiger", "kitty"})
|
||||||
|
@Scope(value = "prototype")
|
||||||
|
Tiger getTiger(String name) {
|
||||||
|
return new Tiger(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(name = "lion")
|
||||||
|
Lion getLion() {
|
||||||
|
return new Lion("Hardcoded lion name");
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Animal {}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.baeldung.getbean;
|
||||||
|
|
||||||
|
class Lion implements AnnotationConfig.Animal {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
Lion(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.baeldung.getbean;
|
||||||
|
|
||||||
|
class Tiger implements AnnotationConfig.Animal {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
Tiger(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package com.baeldung.getbean;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.TestInstance;
|
||||||
|
import org.springframework.beans.factory.BeanNotOfRequiredTypeException;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
|
||||||
|
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||||
|
class GetBeanByNameAndTypeUnitTest {
|
||||||
|
private ApplicationContext context;
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
void setup() {
|
||||||
|
context = new AnnotationConfigApplicationContext(AnnotationConfig.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenSpecifiedMatchingNameAndType_thenShouldReturnRelatedBean() {
|
||||||
|
Lion lion = context.getBean("lion", Lion.class);
|
||||||
|
|
||||||
|
assertEquals("Hardcoded lion name", lion.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenSpecifiedNotMatchingNameAndType_thenShouldThrowException() {
|
||||||
|
assertThrows(BeanNotOfRequiredTypeException.class, () -> context.getBean("lion", Tiger.class));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
package com.baeldung.getbean;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.TestInstance;
|
||||||
|
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
|
||||||
|
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||||
|
class GetBeanByNameUnitTest {
|
||||||
|
private ApplicationContext context;
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
void setup() {
|
||||||
|
context = new AnnotationConfigApplicationContext(AnnotationConfig.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenGivenExistingBeanName_shouldReturnThatBean() {
|
||||||
|
Object requestedBean = context.getBean("lion");
|
||||||
|
|
||||||
|
assertEquals(requestedBean.getClass(), Lion.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenGivenNonExistingBeanName_shouldThrowException() {
|
||||||
|
assertThrows(NoSuchBeanDefinitionException.class, () -> context.getBean("non-existing"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenCastingToWrongType_thenShouldThrowException() {
|
||||||
|
assertThrows(ClassCastException.class, () -> {
|
||||||
|
Tiger tiger = (Tiger) context.getBean("lion");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package com.baeldung.getbean;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.TestInstance;
|
||||||
|
import org.springframework.beans.factory.UnsatisfiedDependencyException;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
|
||||||
|
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||||
|
class GetBeanByNameWithConstructorParametersUnitTest {
|
||||||
|
private ApplicationContext context;
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
void setup() {
|
||||||
|
context = new AnnotationConfigApplicationContext(AnnotationConfig.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenGivenCorrectNameOrAlias_shouldReturnBeanWithSpecifiedName() {
|
||||||
|
Tiger tiger = (Tiger) context.getBean("tiger", "Cutie");
|
||||||
|
Tiger tigerSecond = (Tiger) context.getBean("tiger", "Striped");
|
||||||
|
Tiger tigerViaAlias = (Tiger) context.getBean("kitty", "Siberian");
|
||||||
|
assertEquals("Cutie", tiger.getName());
|
||||||
|
assertEquals("Striped", tigerSecond.getName());
|
||||||
|
assertEquals("Siberian", tigerViaAlias.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenNoArgumentSpecifiedForPrototypeBean_thenShouldThrowException() {
|
||||||
|
assertThrows(UnsatisfiedDependencyException.class, () -> {
|
||||||
|
Tiger tiger = (Tiger) context.getBean("tiger");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package com.baeldung.getbean;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.TestInstance;
|
||||||
|
import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
|
||||||
|
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||||
|
class GetBeanByTypeUnitTest {
|
||||||
|
private ApplicationContext context;
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
void setup() {
|
||||||
|
context = new AnnotationConfigApplicationContext(AnnotationConfig.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenGivenExistingUniqueType_thenShouldReturnRelatedBean() {
|
||||||
|
Lion lion = context.getBean(Lion.class);
|
||||||
|
|
||||||
|
assertNotNull(lion);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenGivenAmbiguousType_thenShouldThrowException() {
|
||||||
|
assertThrows(NoUniqueBeanDefinitionException.class, () -> context.getBean(AnnotationConfig.Animal.class));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package com.baeldung.getbean;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.TestInstance;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||||
|
class GetBeanByTypeWithConstructorParametersUnitTest {
|
||||||
|
private ApplicationContext context;
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
void setup() {
|
||||||
|
context = new AnnotationConfigApplicationContext(AnnotationConfig.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenGivenExistingTypeAndValidParameters_thenShouldReturnRelatedBean() {
|
||||||
|
Tiger tiger = context.getBean(Tiger.class, "Shere Khan");
|
||||||
|
|
||||||
|
assertEquals("Shere Khan", tiger.getName());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue