AOP, DI and interceptors explained