BAEL-4290: tracking down cause of Spring's “not eligible for auto-proxying” (#10593)
This commit is contained in:
+49
@@ -0,0 +1,49 @@
|
||||
package com.baeldung.component.autoproxying;
|
||||
|
||||
import ch.qos.logback.classic.Level;
|
||||
import ch.qos.logback.classic.Logger;
|
||||
import ch.qos.logback.classic.LoggerContext;
|
||||
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(classes = {EligibleForAutoProxyRandomIntProcessor.class, DataCache.class, RandomIntGenerator.class})
|
||||
public class EligibleForAutoProxyingIntegrationTest {
|
||||
private static MemoryLogAppender memoryAppender;
|
||||
|
||||
private EligibleForAutoProxyRandomIntProcessor randomIntProcessor;
|
||||
|
||||
@Autowired
|
||||
private DataCache dataCache;
|
||||
|
||||
@BeforeClass
|
||||
public static void setup() {
|
||||
memoryAppender = new MemoryLogAppender();
|
||||
memoryAppender.setContext((LoggerContext) LoggerFactory.getILoggerFactory());
|
||||
|
||||
Logger logger = (Logger) LoggerFactory.getLogger("org.springframework.context");
|
||||
logger.setLevel(Level.INFO);
|
||||
logger.addAppender(memoryAppender);
|
||||
memoryAppender.start();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenAutowireInBeanPostProcessor_whenSpringContextInitialize_thenNotEligibleLogShouldShowAndGroupFieldPopulated() {
|
||||
List<ILoggingEvent> notEligibleEvents = memoryAppender.search("Bean 'randomIntGenerator' of type [com.baeldung.autoproxying.RandomIntGenerator] " +
|
||||
"is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)");
|
||||
|
||||
assertEquals(0, notEligibleEvents.size());
|
||||
assertNotEquals(0, dataCache.getGroup());
|
||||
}
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
package com.baeldung.component.autoproxying;
|
||||
|
||||
import ch.qos.logback.classic.Level;
|
||||
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||
import ch.qos.logback.core.read.ListAppender;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class MemoryLogAppender extends ListAppender<ILoggingEvent> {
|
||||
public void reset() {
|
||||
this.list.clear();
|
||||
}
|
||||
|
||||
public boolean contains(String string, Level level) {
|
||||
return this.list.stream()
|
||||
.anyMatch(event -> event.getMessage().toString().contains(string)
|
||||
&& event.getLevel().equals(level));
|
||||
}
|
||||
|
||||
public int countEventsForLogger(String loggerName) {
|
||||
return (int) this.list.stream()
|
||||
.filter(event -> event.getLoggerName().contains(loggerName))
|
||||
.count();
|
||||
}
|
||||
|
||||
public List<ILoggingEvent> search(String string) {
|
||||
return this.list.stream()
|
||||
.filter(event -> event.getMessage().toString().contains(string))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<ILoggingEvent> search(String string, Level level) {
|
||||
return this.list.stream()
|
||||
.filter(event -> event.getMessage().toString().contains(string)
|
||||
&& event.getLevel().equals(level))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
return this.list.size();
|
||||
}
|
||||
|
||||
public List<ILoggingEvent> getLoggedEvents() {
|
||||
return Collections.unmodifiableList(this.list);
|
||||
}
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
package com.baeldung.component.autoproxying;
|
||||
|
||||
import ch.qos.logback.classic.Level;
|
||||
import ch.qos.logback.classic.Logger;
|
||||
import ch.qos.logback.classic.LoggerContext;
|
||||
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(classes = {NotEligibleForAutoProxyRandomIntProcessor.class, DataCache.class, RandomIntGenerator.class})
|
||||
public class NotEligibleForAutoProxyingIntegrationTest {
|
||||
private static MemoryLogAppender memoryAppender;
|
||||
|
||||
private NotEligibleForAutoProxyRandomIntProcessor proxyRandomIntProcessor;
|
||||
|
||||
@Autowired
|
||||
private DataCache dataCache;
|
||||
|
||||
@BeforeClass
|
||||
public static void setup() {
|
||||
memoryAppender = new MemoryLogAppender();
|
||||
memoryAppender.setContext((LoggerContext) LoggerFactory.getILoggerFactory());
|
||||
|
||||
Logger logger = (Logger) LoggerFactory.getLogger("org.springframework.context");
|
||||
logger.setLevel(Level.INFO);
|
||||
logger.addAppender(memoryAppender);
|
||||
memoryAppender.start();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenAutowireInBeanPostProcessor_whenSpringContextInitialize_thenNotEligibleLogShouldShowAndGroupFieldNotPopulated() {
|
||||
List<ILoggingEvent> notEligibleEvents = memoryAppender.search("Bean 'randomIntGenerator' of type [com.baeldung.autoproxying.RandomIntGenerator] " +
|
||||
"is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)");
|
||||
|
||||
assertEquals(1, notEligibleEvents.size());
|
||||
assertEquals(0, dataCache.getGroup());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user