/** hook into superclass suite of tests */ @Override protected ConfigurableApplicationContext getApplicationContext() { return new AnnotationConfigApplicationContext(EnableCachingConfig.class); }
/** * Tests that Configuration classes are registered according to convention * @see org.springframework.beans.factory.support.DefaultBeanNameGenerator#generateBeanName */ @Test public void defaultConfigClassBeanNameIsGeneratedProperly() { ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); // attempt to retrieve the instance by its generated bean name Config configObject = (Config) context.getBean("annotationConfigApplicationContextTests.Config"); assertNotNull(configObject); }
@Test public void fooServiceWithInterface() { this.context = new AnnotationConfigApplicationContext(FooConfig.class); FooService service = this.context.getBean(FooService.class); fooGetSimple(service); }
@Test public void testLazyValidatorForMethodValidationWithProxyTargetClass() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext( LazyMethodValidationConfigWithProxyTargetClass.class, CustomValidatorBean.class, MyValidBean.class, MyValidFactoryBean.class); ctx.getBeansOfType(MyValidInterface.class).values().forEach(bean -> bean.myValidMethod("value", 5)); }
@Test public void testLazyValidatorForMethodValidation() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext( LazyMethodValidationConfig.class, CustomValidatorBean.class, MyValidBean.class, MyValidFactoryBean.class); ctx.getBeansOfType(MyValidInterface.class).values().forEach(bean -> bean.myValidMethod("value", 5)); }
@Test public void scanAndRefresh() { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.scan("org.springframework.context.annotation6"); context.refresh(); context.getBean(uncapitalize(ConfigForScanning.class.getSimpleName())); context.getBean("testBean"); // contributed by ConfigForScanning context.getBean(uncapitalize(ComponentForScanning.class.getSimpleName())); context.getBean(uncapitalize(Jsr330NamedForScanning.class.getSimpleName())); Map<String, Object> beans = context.getBeansWithAnnotation(Configuration.class); assertEquals(1, beans.size()); }
@Test // SPR-11692 @SuppressWarnings("unchecked") public void expressionIsCacheBasedOnActualMethod() { ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(SharedConfig.class, Spr11692Config.class); BaseDao<User> userDao = (BaseDao<User>) context.getBean("userDao"); BaseDao<Order> orderDao = (BaseDao<Order>) context.getBean("orderDao"); userDao.persist(new User("1")); orderDao.persist(new Order("2")); context.close(); }
@Test public void implicitTxManager() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(ImplicitTxManagerConfig.class); ctx.refresh(); FooRepository fooRepository = ctx.getBean(FooRepository.class); fooRepository.findAll(); CallCountingTransactionManager txManager = ctx.getBean(CallCountingTransactionManager.class); assertThat(txManager.begun, equalTo(1)); assertThat(txManager.commits, equalTo(1)); assertThat(txManager.rollbacks, equalTo(0)); }
@Test public void succeedsWhenJdkProxyAndScheduledMethodIsPresentOnInterface() throws InterruptedException { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(Config.class, JdkProxyTxConfig.class, RepoConfigB.class); ctx.refresh(); Thread.sleep(100); // allow @Scheduled method to be called several times MyRepositoryWithScheduledMethod repository = ctx.getBean(MyRepositoryWithScheduledMethod.class); CallCountingTransactionManager txManager = ctx.getBean(CallCountingTransactionManager.class); assertThat("repository is not a proxy", AopUtils.isJdkDynamicProxy(repository), is(true)); assertThat("@Scheduled method never called", repository.getInvocationCount(), greaterThan(0)); assertThat("no transactions were committed", txManager.commits, greaterThan(0)); }
@Test public void withExplicitScheduledTaskRegistrar() throws InterruptedException { Assume.group(TestGroup.PERFORMANCE); ctx = new AnnotationConfigApplicationContext(ExplicitScheduledTaskRegistrarConfig.class); assertEquals(1, ctx.getBean(ScheduledTaskHolder.class).getScheduledTasks().size()); Thread.sleep(100); assertThat(ctx.getBean(AtomicInteger.class).get(), greaterThanOrEqualTo(10)); assertThat(ctx.getBean(ExplicitScheduledTaskRegistrarConfig.class).threadName, startsWith("explicitScheduler1")); }
@Test public void withNonStaticBeanMethodAndInterface() { MyBeanImpl.initialized = false; ApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigWithNonStaticAndInterface.class); MyBean bean = ctx.getBean("myBean", MyBean.class); assertFalse(MyBeanImpl.initialized); bean.doIt(); assertTrue(MyBeanImpl.initialized); }
@Test public void apcEscalation() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(EnableTxAndCachingConfig.class); ctx.refresh(); }
@Test public void annotatedServiceWithoutInterface_PTC_false() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(PTCFalse.class, AnnotatedServiceWithoutInterface.class); ctx.refresh(); AnnotatedServiceWithoutInterface s = ctx.getBean(AnnotatedServiceWithoutInterface.class); assertTrue("expected a subclass proxy", AopUtils.isCglibProxy(s)); assertThat(s, instanceOf(AnnotatedServiceWithoutInterface.class)); }
@Test public void beanMethodThroughAopProxy() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(Config.class); ctx.register(AnnotationAwareAspectJAutoProxyCreator.class); ctx.register(TestAdvisor.class); ctx.refresh(); ctx.getBean("testBean", TestBean.class); }
@Test public void repositoryIsTxProxy_withDefaultTxManagerName() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(Config.class, DefaultTxManagerNameConfig.class); ctx.refresh(); assertTxProxying(ctx); }
@Test public void beanMethodOverridingOnASM() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.registerBeanDefinition("config", new RootBeanDefinition(OverridingConfig.class.getName())); ctx.setAllowBeanDefinitionOverriding(false); ctx.refresh(); assertFalse(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")); assertEquals("overridden", ctx.getBean("testBean", TestBean.class).toString()); assertTrue(ctx.getDefaultListableBeanFactory().containsSingleton("testBean")); }
@Ignore @Test // TODO SPR-8207 public void repositoryIsTxProxy_withNonConventionalTxManagerName_fallsBackToByTypeLookup() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(Config.class, NonConventionalTxManagerNameConfig.class); ctx.refresh(); assertTxProxying(ctx); }
@Test public void mostSpecificDerivedClassDrivesEnvironment_withDerivedDevEnvAndDerivedDevConfigClass() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); StandardEnvironment derivedDevEnv = new StandardEnvironment(); derivedDevEnv.setActiveProfiles(DERIVED_DEV_ENV_NAME); ctx.setEnvironment(derivedDevEnv); ctx.register(DerivedDevConfig.class); ctx.refresh(); assertThat("should have dev bean", ctx.containsBean(DEV_BEAN_NAME), is(true)); assertThat("should have derived dev bean", ctx.containsBean(DERIVED_DEV_BEAN_NAME), is(true)); assertThat("should have transitive bean", ctx.containsBean(TRANSITIVE_BEAN_NAME), is(true)); }
@Test public void beanMethodOverloadingWithInheritance() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(SubConfig.class); ctx.setAllowBeanDefinitionOverriding(false); ctx.refresh(); assertFalse(ctx.getDefaultListableBeanFactory().containsSingleton("aString")); assertThat(ctx.getBean(String.class), equalTo("overloaded5")); assertTrue(ctx.getDefaultListableBeanFactory().containsSingleton("aString")); }
private ScriptTemplateView createViewWithUrl(String viewUrl) throws Exception { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(ScriptTemplatingConfiguration.class); ctx.refresh(); ScriptTemplateView view = new ScriptTemplateView(); view.setApplicationContext(ctx); view.setUrl(viewUrl); view.afterPropertiesSet(); return view; }