refactoring:change pub/sub methods to aop