public void evenCircularScansAreSupported() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(LeftConfig.class); // left scans right, and right scans left ctx.refresh(); ctx.getBean("leftConfig"); // but this is handled gracefully ctx.getBean("rightConfig"); // and beans from both packages are available }
@Test public void withMultipleAnnotationIncludeFilters2() throws IOException, ClassNotFoundException { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(ComponentScanWithMultipleAnnotationIncludeFilters2.class); ctx.refresh(); ctx.getBean(DefaultNamedComponent.class); // @CustomStereotype-annotated ctx.getBean(MessageBean.class); // @CustomComponent-annotated }
@Test public void withScopeResolver() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ComponentScanWithScopeResolver.class); // custom scope annotation makes the bean prototype scoped. subsequent calls // to getBean should return distinct instances. assertThat( ctx.getBean(CustomScopeAnnotationBean.class), not(sameInstance(ctx.getBean(CustomScopeAnnotationBean.class)))); }
@Test public void recursion() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(Level1Config.class); ctx.refresh(); // assert that all levels have been detected ctx.getBean(Level1Config.class); ctx.getBean(Level2Config.class); ctx.getBean(Level3Component.class); // assert that enhancement is working assertThat(ctx.getBean("level1Bean"), sameInstance(ctx.getBean("level1Bean"))); assertThat(ctx.getBean("level2Bean"), sameInstance(ctx.getBean("level2Bean"))); }
@Test public void withCustomTypeFilter() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ComponentScanWithCustomTypeFilter.class); CustomAnnotationAutowiredBean testBean = ctx.getBean(CustomAnnotationAutowiredBean.class); assertThat(testBean.getDependency(), notNullValue()); }
@Test public void viaContextRegistration_WithValueAttribute() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(ComponentScanAnnotatedConfig_WithValueAttribute.class); ctx.refresh(); ctx.getBean(ComponentScanAnnotatedConfig_WithValueAttribute.class); ctx.getBean(TestBean.class); assertThat( "config class bean not found", ctx.containsBeanDefinition("componentScanAnnotatedConfig_WithValueAttribute"), is(true)); assertThat( "@ComponentScan annotated @Configuration class registered directly against " + "AnnotationConfigApplicationContext did not trigger component scanning as expected", ctx.containsBean("fooServiceImpl"), is(true)); }
@Test public void viaContextRegistration_WithLocallyDeclaredComposedAnnotation() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(ComposedAnnotationConfig.class); ctx.refresh(); ctx.getBean(ComposedAnnotationConfig.class); ctx.getBean(SimpleComponent.class); assertThat( "config class bean not found", ctx.containsBeanDefinition( "componentScanAnnotationIntegrationTests.ComposedAnnotationConfig"), is(true)); assertThat( "@ComponentScan annotated @Configuration class registered directly against " + "AnnotationConfigApplicationContext did not trigger component scanning as expected", ctx.containsBean("simpleComponent"), is(true)); }
@Test public void withScopedProxyThroughAspectJPattern() throws IOException, ClassNotFoundException { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(ComponentScanWithScopedProxyThroughAspectJPattern.class); ctx.getBeanFactory().registerScope("myScope", new SimpleMapScope()); ctx.refresh(); // should cast to the interface FooService bean = (FooService) ctx.getBean("scopedProxyTestBean"); // should be dynamic proxy assertThat(AopUtils.isJdkDynamicProxy(bean), is(true)); }
@Test public void withScopedProxy() throws IOException, ClassNotFoundException { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(ComponentScanWithScopedProxy.class); ctx.getBeanFactory().registerScope("myScope", new SimpleMapScope()); ctx.refresh(); // should cast to the interface FooService bean = (FooService) ctx.getBean("scopedProxyTestBean"); // should be dynamic proxy assertThat(AopUtils.isJdkDynamicProxy(bean), is(true)); // test serializability assertThat(bean.foo(1), equalTo("bar")); FooService deserialized = (FooService) SerializationTestUtils.serializeAndDeserialize(bean); assertThat(deserialized, notNullValue()); assertThat(deserialized.foo(1), equalTo("bar")); }
@Test public void viaContextRegistration_FromPackageOfConfigClass() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(ComponentScanAnnotatedConfigWithImplicitBasePackage.class); ctx.refresh(); ctx.getBean(ComponentScanAnnotatedConfigWithImplicitBasePackage.class); assertThat( "config class bean not found", ctx.containsBeanDefinition("componentScanAnnotatedConfigWithImplicitBasePackage"), is(true)); assertThat( "@ComponentScan annotated @Configuration class registered directly against " + "AnnotationConfigApplicationContext did not trigger component scanning as expected", ctx.containsBean("scannedComponent"), is(true)); }