Spring AOP в пределах pointcut - PullRequest
3 голосов
/ 29 июля 2011
package com.vanilla.daoService;

    @Repository("daoService")
    public class DaoServiceImpl implements DaoService {

        @Override
        public String addStudent(Student student) {
            //saving new user
             }

        @Override
        public String updateStudent(Student student) {
            //update new user
             }

        @Override
        public String getStudent(String id) {
            //update new user
             }
    }

мой класс бизнес-логики:

package com.vanilla.blService;

@Service("blService") 
public class BlServiceImpl implements BlService {

    @Autowired
    DaoService daoService;

@Override
public void updateStudent(String id){
   Student s = daoService.getStudent(id);
   set.setAddress(address);
   daoService.updateStudent(s);
}

}

Теперь я хотел бы измерить выполнение всех методов, выполняемых в каждой из функций бизнес-логики (daoservice. *)

Я создаю свои классы Aspect

@Aspect
public class BlServiceProfiler {

    @Pointcut("within(com.vanilla.blService.BlService.*)")
    public void businessLogicMethods(){}

      @Around("businessLogicMethods()")
      public Object profile(ProceedingJoinPoint pjp) throws Throwable {
          long start = System.currentTimeMillis();
          System.out.println("Going to call the method " + pjp.toShortString());
          Object output = pjp.proceed();
          System.out.println("Method execution completed.");
          long elapsedTime = System.currentTimeMillis() - start;
          System.out.println(pjp.toShortString()+" execution time: " + elapsedTime + " milliseconds.");
          return output;
      }

}

К сожалению, ничего не произошло. Я думаю, что мое @PointCut определение неверно, как я могу сделать это правильно?

Ответы [ 3 ]

2 голосов
/ 29 июля 2011

Вы, вероятно, хотите это:

@Pointcut("within(com.vanilla.blService.BlService+)")
public void businessLogicMethods(){}

BlService+ означает BlService и все подклассы / реализующие классы.

1 голос
/ 27 мая 2012

Вы должны использовать приведенный ниже pointcut

@Pointcut("execution(* com.vanilla.blService.BlService.*(..))")
0 голосов
/ 29 июля 2011

Попробуйте использовать:

within(com.vanilla.blService.BlService) && execution(public * com.vanilla.daoService..*.*(..))
...