org.springframework.context.support.StaticApplicationContext#getBean ( )源码实例Demo

下面列出了org.springframework.context.support.StaticApplicationContext#getBean ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: rqueue   文件: RqueueMessageHandlerTest.java
@Test
public void testMethodHavingNameFromPropertyFileWithExpression() {
  StaticApplicationContext applicationContext = new StaticApplicationContext();
  applicationContext.registerSingleton(
      "messageHandler", MessageHandlerWithExpressionProperty.class);
  applicationContext.registerSingleton("rqueueMessageHandler", RqueueMessageHandler.class);

  applicationContext
      .getEnvironment()
      .getPropertySources()
      .addLast(new MapPropertySource("test", Collections.singletonMap("queueName", slowQueue)));

  applicationContext.registerSingleton("ppc", PropertySourcesPlaceholderConfigurer.class);
  applicationContext.refresh();
  MessageHandler messageHandler = applicationContext.getBean(MessageHandler.class);
  MessageHandlerWithExpressionProperty messageListener =
      applicationContext.getBean(MessageHandlerWithExpressionProperty.class);
  messageHandler.handleMessage(buildMessage(slowQueue, message));
  assertEquals(message, messageListener.getLastReceivedMessage());
}
 
@Test
public void invokedAsynchronouslyOnProxyTarget() {
	StaticApplicationContext context = new StaticApplicationContext();
	context.registerBeanDefinition("postProcessor", new RootBeanDefinition(AsyncAnnotationBeanPostProcessor.class));
	TestBean tb = new TestBean();
	ProxyFactory pf = new ProxyFactory(ITestBean.class,
			(MethodInterceptor) invocation -> invocation.getMethod().invoke(tb, invocation.getArguments()));
	context.registerBean("target", ITestBean.class, () -> (ITestBean) pf.getProxy());
	context.refresh();

	ITestBean testBean = context.getBean("target", ITestBean.class);
	testBean.test();
	Thread mainThread = Thread.currentThread();
	testBean.await(3000);
	Thread asyncThread = testBean.getThread();
	assertNotSame(mainThread, asyncThread);
	context.close();
}
 
@Test
public void listenersInApplicationContextWithPayloadEvents() {
	StaticApplicationContext context = new StaticApplicationContext();
	context.registerBeanDefinition("listener", new RootBeanDefinition(MyPayloadListener.class));
	context.refresh();

	MyPayloadListener listener = context.getBean("listener", MyPayloadListener.class);
	context.publishEvent("event1");
	context.publishEvent("event2");
	context.publishEvent("event3");
	context.publishEvent("event4");
	assertTrue(listener.seenPayloads.contains("event1"));
	assertTrue(listener.seenPayloads.contains("event2"));
	assertTrue(listener.seenPayloads.contains("event3"));
	assertTrue(listener.seenPayloads.contains("event4"));

	AbstractApplicationEventMulticaster multicaster = context.getBean(AbstractApplicationEventMulticaster.class);
	assertEquals(2, multicaster.retrieverCache.size());

	context.close();
}
 
@Test
public void testQualifiedByParameterName() {
	StaticApplicationContext context = new StaticApplicationContext();
	BeanDefinitionReader reader = new XmlBeanDefinitionReader(context);
	reader.loadBeanDefinitions(CONFIG_LOCATION);
	context.registerSingleton("testBean", QualifiedByParameterNameTestBean.class);
	context.refresh();
	QualifiedByParameterNameTestBean testBean = (QualifiedByParameterNameTestBean) context.getBean("testBean");
	Person person = testBean.getLarry();
	assertEquals("LarryBean", person.getName());
}
 
@Test
public void taskExecutorByBeanName() {
	StaticApplicationContext context = new StaticApplicationContext();

	BeanDefinition processorDefinition = new RootBeanDefinition(AsyncAnnotationBeanPostProcessor.class);
	context.registerBeanDefinition("postProcessor", processorDefinition);

	BeanDefinition executorDefinition = new RootBeanDefinition(ThreadPoolTaskExecutor.class);
	executorDefinition.getPropertyValues().add("threadNamePrefix", "testExecutor");
	context.registerBeanDefinition("myExecutor", executorDefinition);

	BeanDefinition executorDefinition2 = new RootBeanDefinition(ThreadPoolTaskExecutor.class);
	executorDefinition2.getPropertyValues().add("threadNamePrefix", "testExecutor2");
	context.registerBeanDefinition("taskExecutor", executorDefinition2);

	BeanDefinition targetDefinition =
			new RootBeanDefinition(AsyncAnnotationBeanPostProcessorTests.TestBean.class);
	context.registerBeanDefinition("target", targetDefinition);

	context.refresh();

	ITestBean testBean = context.getBean("target", ITestBean.class);
	testBean.test();
	testBean.await(3000);
	Thread asyncThread = testBean.getThread();
	assertTrue(asyncThread.getName().startsWith("testExecutor2"));
	context.close();
}
 
@Test
public void testQualifiedByAnnotation() {
	StaticApplicationContext context = new StaticApplicationContext();
	BeanDefinitionReader reader = new XmlBeanDefinitionReader(context);
	reader.loadBeanDefinitions(CONFIG_LOCATION);
	context.registerSingleton("testBean", QualifiedByAnnotationTestBean.class);
	context.refresh();
	QualifiedByAnnotationTestBean testBean = (QualifiedByAnnotationTestBean) context.getBean("testBean");
	Person person = testBean.getLarry();
	assertEquals("LarrySpecial", person.getName());
}
 
@Test
public void testAutoProxyCreatorWithFactoryBeanAndProxyObjectOnly() {
	StaticApplicationContext sac = new StaticApplicationContext();

	MutablePropertyValues pvs = new MutablePropertyValues();
	pvs.add("proxyFactoryBean", "false");
	sac.registerSingleton("testAutoProxyCreator", TestAutoProxyCreator.class, pvs);

	sac.registerSingleton("singletonFactoryToBeProxied", DummyFactory.class);

	sac.refresh();

	TestAutoProxyCreator tapc = (TestAutoProxyCreator) sac.getBean("testAutoProxyCreator");
	tapc.testInterceptor.nrOfInvocations = 0;

	FactoryBean<?> factory = (FactoryBean<?>) sac.getBean("&singletonFactoryToBeProxied");
	assertFalse(AopUtils.isAopProxy(factory));

	TestBean tb = (TestBean) sac.getBean("singletonFactoryToBeProxied");
	assertTrue(AopUtils.isCglibProxy(tb));
	assertEquals(0, tapc.testInterceptor.nrOfInvocations);
	tb.getAge();
	assertEquals(1, tapc.testInterceptor.nrOfInvocations);

	TestBean tb2 = (TestBean) sac.getBean("singletonFactoryToBeProxied");
	assertSame(tb, tb2);
	assertEquals(1, tapc.testInterceptor.nrOfInvocations);
	tb2.getAge();
	assertEquals(2, tapc.testInterceptor.nrOfInvocations);
}
 
@Test
public void testQualifiedByValue() {
	StaticApplicationContext context = new StaticApplicationContext();
	BeanDefinitionReader reader = new XmlBeanDefinitionReader(context);
	reader.loadBeanDefinitions(CONFIG_LOCATION);
	context.registerSingleton("testBean", QualifiedByValueTestBean.class);
	context.refresh();
	QualifiedByValueTestBean testBean = (QualifiedByValueTestBean) context.getBean("testBean");
	Person person = testBean.getLarry();
	assertEquals("Larry", person.getName());
}
 
@Test
public void testQualifiedByValue() {
	StaticApplicationContext context = new StaticApplicationContext();
	BeanDefinitionReader reader = new XmlBeanDefinitionReader(context);
	reader.loadBeanDefinitions(CONFIG_LOCATION);
	context.registerSingleton("testBean", QualifiedByValueTestBean.class);
	context.refresh();
	QualifiedByValueTestBean testBean = (QualifiedByValueTestBean) context.getBean("testBean");
	Person person = testBean.getLarry();
	assertEquals("Larry", person.getName());
}
 
@Test
public void innerBeanAsListener() {
	StaticApplicationContext context = new StaticApplicationContext();
	RootBeanDefinition listenerDef = new RootBeanDefinition(TestBean.class);
	listenerDef.getPropertyValues().add("friends", new RootBeanDefinition(BeanThatListens.class));
	context.registerBeanDefinition("listener", listenerDef);
	context.refresh();

	context.publishEvent(new MyEvent(this));
	context.publishEvent(new MyEvent(this));
	TestBean listener = context.getBean(TestBean.class);
	assertEquals(3, ((BeanThatListens) listener.getFriends().iterator().next()).getEventCount());

	context.close();
}
 
@Test
public void testAutoProxyCreatorWithFallbackToDynamicProxy() {
	StaticApplicationContext sac = new StaticApplicationContext();

	MutablePropertyValues pvs = new MutablePropertyValues();
	pvs.add("proxyFactoryBean", "false");
	sac.registerSingleton("testAutoProxyCreator", TestAutoProxyCreator.class, pvs);

	sac.registerSingleton("noInterfaces", NoInterfaces.class);
	sac.registerSingleton("containerCallbackInterfacesOnly", ContainerCallbackInterfacesOnly.class);
	sac.registerSingleton("singletonNoInterceptor", CustomProxyFactoryBean.class);
	sac.registerSingleton("singletonToBeProxied", CustomProxyFactoryBean.class);
	sac.registerPrototype("prototypeToBeProxied", SpringProxyFactoryBean.class);

	sac.refresh();

	MessageSource messageSource = (MessageSource) sac.getBean("messageSource");
	NoInterfaces noInterfaces = (NoInterfaces) sac.getBean("noInterfaces");
	ContainerCallbackInterfacesOnly containerCallbackInterfacesOnly =
			(ContainerCallbackInterfacesOnly) sac.getBean("containerCallbackInterfacesOnly");
	ITestBean singletonNoInterceptor = (ITestBean) sac.getBean("singletonNoInterceptor");
	ITestBean singletonToBeProxied = (ITestBean) sac.getBean("singletonToBeProxied");
	ITestBean prototypeToBeProxied = (ITestBean) sac.getBean("prototypeToBeProxied");
	assertFalse(AopUtils.isCglibProxy(messageSource));
	assertTrue(AopUtils.isCglibProxy(noInterfaces));
	assertTrue(AopUtils.isCglibProxy(containerCallbackInterfacesOnly));
	assertFalse(AopUtils.isCglibProxy(singletonNoInterceptor));
	assertFalse(AopUtils.isCglibProxy(singletonToBeProxied));
	assertFalse(AopUtils.isCglibProxy(prototypeToBeProxied));

	TestAutoProxyCreator tapc = (TestAutoProxyCreator) sac.getBean("testAutoProxyCreator");
	assertEquals(0, tapc.testInterceptor.nrOfInvocations);
	singletonNoInterceptor.getName();
	assertEquals(0, tapc.testInterceptor.nrOfInvocations);
	singletonToBeProxied.getAge();
	assertEquals(1, tapc.testInterceptor.nrOfInvocations);
	prototypeToBeProxied.getSpouse();
	assertEquals(2, tapc.testInterceptor.nrOfInvocations);
}
 
源代码12 项目: spring-cloud-aws   文件: QueueMessageHandlerTest.java
@Test
void processHandlerMethodException_invocableHandlerMethodNotAvailable_errorMustBeLogged() {
	// Arrange
	StaticApplicationContext applicationContext = new StaticApplicationContext();
	applicationContext.registerSingleton("sqsListenerWithoutMessageExceptionHandler",
			SqsListenerWithoutMessageExceptionHandler.class);
	applicationContext.registerBeanDefinition("queueMessageHandler",
			getQueueMessageHandlerBeanDefinition());
	applicationContext.refresh();
	MessageHandler messageHandler = applicationContext.getBean(MessageHandler.class);

	LoggerContext logContext = (LoggerContext) LoggerFactory.getILoggerFactory();
	ListAppender<ILoggingEvent> appender = new ListAppender<>();
	appender.start();
	Logger log = logContext.getLogger(QueueMessageHandler.class);
	log.setLevel(Level.ERROR);
	log.addAppender(appender);
	appender.setContext(log.getLoggerContext());

	// Act
	assertThatThrownBy(
			() -> messageHandler
					.handleMessage(MessageBuilder.withPayload("testContent")
							.setHeader(QueueMessageHandler.LOGICAL_RESOURCE_ID,
									"receive")
							.build())).isInstanceOf(MessagingException.class);

	// Assert
	assertThat(appender.list).hasSize(1);
}
 
@Test
public void testQualifiedByAnnotationValue() {
	StaticApplicationContext context = new StaticApplicationContext();
	BeanDefinitionReader reader = new XmlBeanDefinitionReader(context);
	reader.loadBeanDefinitions(CONFIG_LOCATION);
	context.registerSingleton("testBean", QualifiedByAnnotationValueTestBean.class);
	context.refresh();
	QualifiedByAnnotationValueTestBean testBean = (QualifiedByAnnotationValueTestBean) context.getBean("testBean");
	Person person = testBean.getLarry();
	assertEquals("LarrySpecial", person.getName());
}
 
@Test
public void contextStartedEvent() {
	StaticApplicationContext context = new StaticApplicationContext();
	context.registerSingleton("lifecycle", LifecycleTestBean.class);
	context.registerSingleton("listener", LifecycleListener.class);
	context.refresh();
	LifecycleTestBean lifecycleBean = (LifecycleTestBean) context.getBean("lifecycle");
	LifecycleListener listener = (LifecycleListener) context.getBean("listener");
	assertFalse(lifecycleBean.isRunning());
	assertEquals(0, listener.getStartedCount());
	context.start();
	assertTrue(lifecycleBean.isRunning());
	assertEquals(1, listener.getStartedCount());
	assertSame(context, listener.getApplicationContext());
}
 
源代码15 项目: spring-cloud-aws   文件: QueueMessageHandlerTest.java
@Test
void receiveMessage_methodAnnotatedWithSqsListenerContainingExpression_methodInvokedOnResolvedExpression() {
	// Arrange
	StaticApplicationContext applicationContext = new StaticApplicationContext();
	applicationContext.getEnvironment().getPropertySources()
			.addLast(new MapPropertySource("test",
					Collections.singletonMap("myQueue", "resolvedQueue")));
	applicationContext.registerSingleton(
			"incomingMessageHandlerWithMultipleQueueNames",
			IncomingMessageHandlerWithExpressionName.class);
	applicationContext.registerSingleton("queueMessageHandler",
			QueueMessageHandler.class);
	applicationContext.refresh();

	QueueMessageHandler queueMessageHandler = applicationContext
			.getBean(QueueMessageHandler.class);

	// Act
	queueMessageHandler.handleMessage(MessageBuilder
			.withPayload("Hello from resolved queue!")
			.setHeader(QueueMessageHandler.LOGICAL_RESOURCE_ID, "resolvedQueue")
			.build());

	// Assert
	IncomingMessageHandlerWithExpressionName incomingMessageHandler = applicationContext
			.getBean(IncomingMessageHandlerWithExpressionName.class);
	assertThat(incomingMessageHandler.getLastReceivedMessage())
			.isEqualTo("Hello from resolved queue!");
}
 
@Test
public void testQualifiedByParameterName() {
	StaticApplicationContext context = new StaticApplicationContext();
	BeanDefinitionReader reader = new XmlBeanDefinitionReader(context);
	reader.loadBeanDefinitions(CONFIG_LOCATION);
	context.registerSingleton("testBean", QualifiedByParameterNameTestBean.class);
	context.refresh();
	QualifiedByParameterNameTestBean testBean = (QualifiedByParameterNameTestBean) context.getBean("testBean");
	Person person = testBean.getLarry();
	assertEquals("LarryBean", person.getName());
}
 
@Test
public void testQualifiedByCustomValue() {
	StaticApplicationContext context = new StaticApplicationContext();
	BeanDefinitionReader reader = new XmlBeanDefinitionReader(context);
	reader.loadBeanDefinitions(CONFIG_LOCATION);
	context.registerSingleton("testBean", QualifiedByCustomValueTestBean.class);
	context.refresh();
	QualifiedByCustomValueTestBean testBean = (QualifiedByCustomValueTestBean) context.getBean("testBean");
	Person person = testBean.getCurly();
	assertEquals("Curly", person.getName());
}
 
@Test
void receiveMessage_withMessageListenerMethodAndVisibilityProlonging_callsChangeMessageVisibility()
		throws Exception {
	// Arrange
	CountDownLatch countDownLatch = new CountDownLatch(1);
	SimpleMessageListenerContainer container = new SimpleMessageListenerContainer() {

		@Override
		protected void executeMessage(
				org.springframework.messaging.Message<String> stringMessage) {
			countDownLatch.countDown();
			super.executeMessage(stringMessage);
		}
	};

	AmazonSQSAsync sqs = mock(AmazonSQSAsync.class);
	container.setAmazonSqs(sqs);

	QueueMessageHandler messageHandler = new QueueMessageHandler();
	container.setMessageHandler(messageHandler);

	StaticApplicationContext applicationContext = new StaticApplicationContext();
	applicationContext.registerSingleton("testListener",
			TestMessageListenerWithVisibilityProlong.class);

	mockGetQueueUrl(sqs, "testQueue",
			"https://receiveMessage_withMessageListenerMethodAnd"
					+ "VisibilityProlonging_callsChangeMessageVisibility.amazonaws.com");
	mockGetQueueAttributesWithEmptyResult(sqs,
			"https://receiveMessage_withMessageListenerMethodAnd"
					+ "VisibilityProlonging_callsChangeMessageVisibility.amazonaws.com");

	messageHandler.setApplicationContext(applicationContext);
	messageHandler.afterPropertiesSet();
	container.afterPropertiesSet();

	mockReceiveMessage(sqs, "https://receiveMessage_withMessageListenerMethodAnd"
			+ "VisibilityProlonging_callsChangeMessageVisibility.amazonaws.com",
			"messageContent", "ReceiptHandle");

	// Act
	container.start();

	// Assert
	countDownLatch.await(1L, TimeUnit.SECONDS);
	verify(sqs, never())
			.changeMessageVisibilityAsync(any(ChangeMessageVisibilityRequest.class));
	TestMessageListenerWithVisibilityProlong testMessageListenerWithVisibilityProlong = applicationContext
			.getBean(TestMessageListenerWithVisibilityProlong.class);
	testMessageListenerWithVisibilityProlong.getCountDownLatch().await(1L,
			TimeUnit.SECONDS);
	testMessageListenerWithVisibilityProlong.extend(5);
	verify(sqs, times(1))
			.changeMessageVisibilityAsync(eq(new ChangeMessageVisibilityRequest(
					"https://receiveMessage_withMessageListenerMethodAnd"
							+ "VisibilityProlonging_callsChangeMessageVisibility.amazonaws.com",
					"ReceiptHandle", 5)));
	container.stop();
}
 
@Test
public void testMessageFetcherRetryWorking() throws Exception {
  AtomicInteger fastQueueCounter = new AtomicInteger(0);
  String fastQueueMessage = "This is fast queue";
  RqueueMessage message = new RqueueMessage(fastQueue, fastQueueMessage, null, null);

  RqueueMessageTemplate rqueueMessageTemplate = mock(RqueueMessageTemplate.class);

  StaticApplicationContext applicationContext = new StaticApplicationContext();
  applicationContext.registerSingleton("rqueueConfig", RqueueConfig.class);
  applicationContext.registerSingleton("messageHandler", RqueueMessageHandler.class);
  applicationContext.registerSingleton("fastMessageListener", FastMessageListener.class);
  applicationContext.registerSingleton(
      "rqueueMessageMetadataService", RqueueMessageMetadataService.class);
  applicationContext.registerSingleton(
      "applicationEventPublisher", ApplicationEventPublisher.class);

  RqueueMessageHandler messageHandler =
      applicationContext.getBean("messageHandler", RqueueMessageHandler.class);
  messageHandler.setApplicationContext(applicationContext);
  messageHandler.afterPropertiesSet();

  RqueueMessageListenerContainer container =
      createContainer(messageHandler, rqueueMessageTemplate);

  doAnswer(
          invocation -> {
            if (fastQueueCounter.get() < 2) {
              if (fastQueueCounter.incrementAndGet() == 1) {
                throw new RedisCommandExecutionException("Some error occurred");
              }
              return message;
            }
            return null;
          })
      .when(rqueueMessageTemplate)
      .pop(fastQueue, fastProcessingQueue, fastProcessingQueueChannel, 900000L);
  FastMessageListener fastMessageListener =
      applicationContext.getBean("fastMessageListener", FastMessageListener.class);
  container.afterPropertiesSet();
  container.start();
  waitFor(() -> fastQueueCounter.get() == 2, "fastQueue message fetch");
  waitFor(
      () -> fastQueueMessage.equals(fastMessageListener.getLastMessage()),
      "message to be consumed");
  container.stop();
  container.doDestroy();
}
 
@Test
void receiveMessage_withMessageListenerMethodAndNeverDeletionPolicy_waitsForAcknowledgmentBeforeDeletion()
		throws Exception {
	// Arrange
	CountDownLatch countDownLatch = new CountDownLatch(1);
	SimpleMessageListenerContainer container = new SimpleMessageListenerContainer() {

		@Override
		protected void executeMessage(
				org.springframework.messaging.Message<String> stringMessage) {
			countDownLatch.countDown();
			super.executeMessage(stringMessage);
		}
	};

	AmazonSQSAsync sqs = mock(AmazonSQSAsync.class);
	container.setAmazonSqs(sqs);

	QueueMessageHandler messageHandler = new QueueMessageHandler();
	container.setMessageHandler(messageHandler);

	StaticApplicationContext applicationContext = new StaticApplicationContext();
	applicationContext.registerSingleton("testListener",
			TestMessageListenerWithManualDeletionPolicy.class);

	mockGetQueueUrl(sqs, "testQueue",
			"https://receiveMessage_withMessageListenerMethodAnd"
					+ "NeverDeletionPolicy_waitsForAcknowledgmentBeforeDeletion.amazonaws.com");
	mockGetQueueAttributesWithEmptyResult(sqs,
			"https://receiveMessage_withMessageListenerMethodAnd"
					+ "NeverDeletionPolicy_waitsForAcknowledgmentBeforeDeletion.amazonaws.com");

	messageHandler.setApplicationContext(applicationContext);
	messageHandler.afterPropertiesSet();
	container.afterPropertiesSet();

	mockReceiveMessage(sqs, "https://receiveMessage_withMessageListenerMethodAnd"
			+ "NeverDeletionPolicy_waitsForAcknowledgmentBeforeDeletion.amazonaws.com",
			"messageContent", "ReceiptHandle");

	// Act
	container.start();

	// Assert
	countDownLatch.await(1L, TimeUnit.SECONDS);
	verify(sqs, never()).deleteMessageAsync(eq(new DeleteMessageRequest(
			"https://receiveMessage_withMessageListenerMethodAnd"
					+ "NeverDeletionPolicy_waitsForAcknowledgmentBeforeDeletion.amazonaws.com",
			"ReceiptHandle")), any(AsyncHandler.class));
	TestMessageListenerWithManualDeletionPolicy testMessageListenerWithManualDeletionPolicy = applicationContext
			.getBean(TestMessageListenerWithManualDeletionPolicy.class);
	testMessageListenerWithManualDeletionPolicy.getCountDownLatch().await(1L,
			TimeUnit.SECONDS);
	testMessageListenerWithManualDeletionPolicy.acknowledge();
	verify(sqs, times(1)).deleteMessageAsync(eq(new DeleteMessageRequest(
			"https://receiveMessage_withMessageListenerMethodAnd"
					+ "NeverDeletionPolicy_waitsForAcknowledgmentBeforeDeletion.amazonaws.com",
			"ReceiptHandle")), any(AsyncHandler.class));
	container.stop();
}