发表于: 2017-08-11 20:53:58

1 824


今天的事情:


学习springaop,其实之前ssm也学习过,但是忽略了细节,只是简单的实现了功能,这次学习springaop 写个简单的事例,以学习下面的如何在linux中打日志,得出db的访问时间,和sql的执行时间,昨天咨询过师兄后,我认为需要从springaop的事例入手


 Joinpoint(连接点):程序执行时的某个特定的点,在Spring中就是某一个方法的执行 
    Pointcut(切点):说的通俗点,spring中AOP的切点就是指一些方法的集合,而这些方法 
是需要被增强、被代理的。一般都是按照一定的约定规则来表示的,如正则表达式等。切点是 
由一类连接点组成。 
    Advice(通知):还是说的通俗点,就是在指定切点上要干些什么。 
    Advisor(通知器):其实就是切点和通知的结合 


  1.   
  2. public class Test {  
  3.     public static void main(String[] args) throws Exception{  
  4.         ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext-aop.xml");  
  5.         Employee e = (Employee)act.getBean("employee");  
  6.         e.signIn();  
  7.           
  8.     }  
  9. }  



  1. <aop:aspectj-autoproxy/>   
  2. <bean id="aspect" class="com.aop.AspectJLogger" />  
  3. <bean id="employee" class="com.aop.CommonEmployee">  
  4.   <property name="name" value="good"></property>  
  5. </bean>  



  1. public class CommonEmployee implements Employee{  
  2.   
  3.     private String name;  
  4.       
  5.     public String getName() {  
  6.         return name;  
  7.     }  
  8.   
  9.     public void setName(String name) {  
  10.         this.name = name;  
  11.     }  
  12.       
  13.     public void signIn() {  
  14.        System.out.println(name+"已经签到了...........");  
  15.     }  
  16. }  



  1. @Aspect    
  2. public class AspectJLogger {  
  3.     /** 
  4.      * 必须为final String类型的,注解里要使用的变量只能是静态常量类型的 
  5.      */  
  6.     public static final String EDP = "execution(* com.aop.CommonEmployee.sign*(..))";  
  7.       
  8.     @Before(EDP)    //spring中Before通知  
  9.     public void logBefore() {  
  10.         System.out.println("logBefore:现在时间是:"+new Date());  
  11.     }  
  12.       
  13.     @After(EDP)    //spring中After通知  
  14.     public void logAfter() {  
  15.         System.out.println("logAfter:现在时间是:"+new Date());  
  16.     }  
  17.       
  18.     @Around(EDP)   //spring中Around通知  
  19.     public Object logAround(ProceedingJoinPoint joinPoint) {  
  20.         System.out.println("logAround开始:现在时间是:"+new Date()); //方法执行前的代理处理  
  21.         Object[] args = joinPoint.getArgs();  
  22.         Object obj = null;  
  23.         try {  
  24.             obj = joinPoint.proceed(args);  
  25.         } catch (Throwable e) {  
  26.             e.printStackTrace();  
  27.         }  
  28.         System.out.println("logAround结束:现在时间是:"+new Date());  //方法执行后的代理处理  
  29.         return obj;  
  30.     }  
  31. }  



明天的计划: 把db访问时间,和sql执行时间统计出来,结束任务3


遇到的问题: 不懂的如何去统计的db访问时间,和sql执行时间  一开始很单纯的以为一个求方法执行时间和相应时间相加就属于一个sql的执行时间,完全的混淆了两个概念,这里需要继续加强,还有自己对给项目中加切入事务的通知还有不明白的地方,需要加强


收获:学习springaop,的确挺难理解的, 还好有师兄指点了,在脑海里有个初步的概念. 


任务进度: 任务3学习springaop

               预计demo事假:8.13日


返回列表 返回列表
评论

    分享到