It creates a BeanPostProcessor to be included in the BeanPostProcessor step in the initialization phase. When that BeanPostProcessor sees @Transactional in your Spring bean code, then it create a DynamicProxy to proxy that bean so that it will run transactionally.