Prev Next

Spring / Spring7 Intermediate to Advanced Interview questions

Explain the internal working of Spring AOP proxy creation?

Spring AOP proxies are created lazily, at bean-instantiation time, by a BeanPostProcessor - specifically a subclass of AbstractAutoProxyCreator - that inspects each new bean against the registered aspects' pointcuts to decide whether it needs advising at all.

flowchart TD
    A[Bean instantiated] --> B{Matches any pointcut?}
    B -- No --> C[Return plain bean]
    B -- Yes --> D{Implements an interface?}
    D -- Yes --> E[JDK dynamic proxy]
    D -- No, or proxyTargetClass=true --> F[CGLIB subclass proxy]

If the target class implements at least one interface, Spring defaults to a JDK dynamic proxy - a java.lang.reflect.Proxy instance implementing the same interfaces, where every call is routed through an InvocationHandler that first runs the matched advice chain (converted internally into a chain of MethodInterceptors) and then, if appropriate, invokes the real target. If the class implements no interfaces, or proxyTargetClass=true is configured, Spring instead uses CGLIB, generating a runtime subclass of the target class itself that overrides advised methods to insert the same interception logic.

This mechanism explains two well-known constraints: CGLIB-based proxies can't advise final methods (a subclass can't override them) and can't be applied to final classes at all; and advice only ever runs for calls that arrive through the proxy reference the container handed out - a call made directly on this from inside the target class bypasses the proxy and its interception logic entirely, which is exactly why self-invoked @Transactional calls silently skip their transaction.

Which proxy type does Spring AOP default to when the target class implements an interface?
Why can't CGLIB-based AOP proxies advise a final method?

Invest now in Acorns!!! 🚀 Join Acorns and get your $5 bonus!
Acorns Logo

Invest now in Acorns!!! 🚀
Join Acorns and get your $5 bonus!

Earn passively and while sleeping

Acorns is a micro-investing app that automatically invests your "spare change" from daily purchases into diversified, expert-built portfolios of ETFs. It is designed for beginners, allowing you to start investing with as little as $5. The service automates saving and investing. Disclosure: I may receive a referral bonus.

Robinhood Logo

Invest now!!! Get Free equity stock (US, UK only)!

Use Robinhood app to invest in stocks. It is safe and secure. Use the Referral link to claim your free stock when you sign up!.

The Robinhood app makes it easy to trade stocks, crypto and more.


Webull Logo

Webull! Receive free stock by signing up using the link: Webull signup.

More Related questions...

What is the difference between Spring Framework 6 and Spring Framework 7? How does Spring Boot 4 differ from Spring Boot 3 in terms of baseline requirements? Which is better and why: upgrading directly from Spring Boot 2 to Spring Boot 4, or upgrading incrementally through Spring Boot 3? Why did Spring Framework 7 move from Jakarta EE 10 to Jakarta EE 11? What happens when a Spring Boot 3 / Spring 6 application is upgraded to Spring Boot 4 / Spring 7 without addressing RestTemplate and other deprecations? What is the difference between Spring Security 6 and Spring Security 7? How does multi-factor authentication (MFA) work natively in Spring Security 7? Why was the OAuth2 password grant removed in Spring Security 7? How does Spring Security 7 improve OAuth2 client support for HTTP service clients like RestClient? When should you choose PKCE over the classic authorization code flow in Spring Security 7's Authorization Server? Explain the execution flow of a request through the Spring Security filter chain? How do you prevent duplicate form submissions caused by double-clicking a submit button in a Spring MVC application? How would you implement idempotency-key based duplicate request detection in a Spring REST API? Why is the Post/Redirect/Get pattern not sufficient on its own to prevent double-click duplicate submissions? Why doesn't @Transactional work when called from within the same class (self-invocation)? How does Spring resolve circular dependencies between singleton beans? Explain the internal working of the DispatcherServlet request-handling flow in Spring MVC? Explain the internal working of Spring AOP proxy creation? How is a GraalVM native image build different from a traditional JAR deployment in Spring Boot 4? When should you choose WebFlux over Spring MVC in a Spring Framework 7 application? How do you troubleshoot a bean that fails to initialize due to a circular dependency? What happens when two beans of the same type exist without a @Primary or @Qualifier? How can you optimize Spring Boot 4 application startup time? Why should you avoid field injection in production Spring codebases? How is the API version resolved when a client sends no version header in Spring Framework 7? Which is better and why: RestClient or WebClient for a blocking Spring MVC service? How does Spring Framework 7 take advantage of virtual threads compared to the traditional platform-thread model? Why doesn't a @Scheduled method run concurrently with itself by default in Spring? How do you troubleshoot a NoSuchBeanDefinitionException in a Spring application? Explain the lifecycle of a request handled through an HTTP Interface client (@HttpExchange) in Spring 7? What is the difference between @ControllerAdvice and a Filter for handling errors in Spring MVC? Why is JSpecify considered a breaking change for some Kotlin Spring projects upgrading to Spring Framework 7? How do you optimize a Spring Data JPA application to avoid the N+1 query problem? When would you choose NESTED over REQUIRES_NEW transaction propagation? How does Micrometer observability integrate with Spring Framework 7's tracing support? Why is @Order important when multiple Filters or HandlerInterceptors are registered in a Spring application? How does Spring Framework 7's BeanRegistrar differ from a traditional @Configuration class with multiple @Bean methods? What is the difference between @RequestMapping's version attribute and content negotiation via the Accept header for API evolution? How do you troubleshoot slow Spring Boot 4 native image builds? Why do many teams delay adopting GraalVM native images despite the startup-time benefits in Spring Boot 4?
Show more question and Answers...

Hibernate

Comments & Discussions