`

spring学习----spring注解实现AOP

阅读更多

Spring----- 注解方法使用 AOP

先建立项目 , spring xml 文件中加入 spring AOP 的支持 . 主要是下面红色字部分 .

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:context="http://www.springframework.org/schema/context"

       xmlns:aop="http://www.springframework.org/schema/aop"     

       xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

       <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

      

       <bean id="myInterceptor" class="com.liyu.service.MyInterceptor"></bean>

       <bean id="personServiceBean" class="com.liyu.service.impl.PersonServiceBean"></bean>

      

</beans>
 

 

再定一个一接口 ,

一个这个接口的实现 .

再就是写这个 AOP 类了 .

package com.liyu.service;

 

import org.aspectj.lang.ProceedingJoinPoint;

import org.aspectj.lang.annotation.After;

import org.aspectj.lang.annotation.AfterReturning;

import org.aspectj.lang.annotation.AfterThrowing;

import org.aspectj.lang.annotation.Around;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

import org.aspectj.lang.annotation.Pointcut;

/**

 * 切面

 *

 */

@Aspect

public class MyInterceptor {

       @Pointcut("execution (* com.liyu.service.impl.PersonServiceBean.*(..))")

       private void anyMethod() {}//声明一个切入点

      

       @Before("anyMethod() && args(name)")

       public void doAccsCheck(String name) {

              System.out.println("前置通知:"+name);

       }

      

       @AfterReturning(pointcut="anyMethod()",returning="result")

       public void doAfterReturning(String result) {

              System.out.println("后置通知:"+result);

       }

       @After("anyMethod()")

       public void doAfter() {

              System.out.println("最终通知:");

       }

      

       @AfterThrowing(pointcut="anyMethod()",throwing="e")

       public void doAfterThrowing(Exception e) {

              System.out.println("例外通知:"+e);

       }

      

       @Around(("anyMethod()"))

       //环绕通知

       public Object doBasicProfiling(ProceedingJoinPoint pjp)throws Throwable{

              System.out.println("进入方法");

              Object result=pjp.proceed();

              System.out.println("退出方法");

              return result;

             

       }

}

 

测试类:

package com.liyu.test;

 

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

import com.liyu.service.PersonService;

public class AOPtest {

 

    public static void main(String[] args) {

       ApplicationContext ctx= new ClassPathXmlApplicationContext("beans.xml");

       //MyInterceptor mi=(MyInterceptor)ctx.getBean("myInterceptor");

       PersonService ps=(PersonService)ctx.getBean("personServiceBean");

      

       ps.save("sss");

    }

}
 

 

 

 

运行结果 :

 

2010-6-15 8:27:27 org.springframework.context.support.AbstractApplicationContext prepareRefresh

信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@147ee05: display name [org.springframework.context.support.ClassPathXmlApplicationContext@147ee05]; startup date [Tue Jun 15 08:27:27 CST 2010]; root of context hierarchy

2010-6-15 8:27:27 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions

信息: Loading XML bean definitions from class path resource [beans.xml]

2010-6-15 8:27:28 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory

信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@147ee05]: org.springframework.beans.factory.support.DefaultListableBeanFactory@273686

2010-6-15 8:27:28 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons

信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@273686: defining beans [org.springframework.aop.config.internalAutoProxyCreator,myInterceptor,personServiceBean]; root of factory hierarchy

前置通知:sss

进入方法

我是save()方法.

后置通知:null

最终通知:

退出方法

 

 

 

我在这里做练习时出错了

PersonService ps=(PersonService)ctx.getBean("personServiceBean");
 

这里一定要使用的是那个接口 .

 

原文地址:http://www.c119.cn/home.php?mod=space&uid=174&do=blog&id=348

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics