Spring’s declarative transactions are implemented via AOP proxies. When you annotate a Spring bean method with @Transactional, Spring generates a proxy (JDK dynamic or CGLIB) around that bean. Calls to the transactional method actually go through the proxy, which applies a TransactionInterceptor before invoking the real method. The interceptor extends TransactionAspectSupport and delegates to a PlatformTransactionManager to start, commit or rollback the transaction Conceptually
This document explain all this concepts in very details