Sobes.tech
Junior — Middle

Can the @Transactional annotation be applied to private methods in Spring?

sobes.tech AI

Answer from AI

The @Transactional annotation in Spring will not work with private methods. This is because Spring implements transactions through proxies that intercept method calls.

Proxies can only intercept calls to public (or sometimes protected) methods that are visible from outside. Private methods are called directly within the class, bypassing the proxy, so the @Transactional annotation on a private method will have no effect.

If you want a method to be transactional, it must be public and called through the Spring proxy.

Example:

@Service
public class MyService {

    @Transactional
    public void publicTransactionalMethod() {
        // transaction will work
        privateMethod();
    }

    private void privateMethod() {
        // @Transactional will not work here if applied
    }
}