public class UserService {
private UserDao userDao;
@Inject
public UserService(UserDao userDao) {
this.userDao = userDao;
}
// ...
}
public class UserDao {
// ...
}
public class UserController {
@Inject
private UserService userService;
// ...
}
public class LoggingInterceptor {
@Inject
private Logger logger;
@Inject
@Delegate
private MyService myService;
@AroundInvoke
public Object logMethod(InvocationContext ctx) throws Exception {
logger.info("Entering " + ctx.getMethod().getName());
try {
return ctx.proceed();
} finally {
logger.info("Exiting " + ctx.getMethod().getName());
}
}
}
public interface MyService {
void doSomething();
}
@LoggingInterceptor
public class MyServiceImpl implements MyService {
@Override
public void doSomething() {
// ...
}
}
public class MyClass {
@Inject
private MyService myService;
// ...
}