首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Spring 基于引语方式声明切面

2012-09-23 
Spring 基于注解方式声明切面package cn.itcast.servicepublic interface PersonService {public void sa

Spring 基于注解方式声明切面

package cn.itcast.service;public interface PersonService {public void save(String name);public void update(String name, Integer id);public String getPersonName(Integer id);}

?

package cn.itcast.service.impl;import cn.itcast.service.PersonService;public class PersonServiceBean implements PersonService {public String getPersonName(Integer id) {System.out.println("我是getPersonName()方法");return "xxx";}public void save(String name) {// throw new RuntimeException("我爱例外");System.out.println("我是save()方法");}public void update(String name, Integer id) {System.out.println("我是update()方法");}}

?

package cn.itcast.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;/** * 切面 *  */@Aspectpublic class MyInterceptor {// 拦截cn.itcast.service.impl.PersonServiceBean下返回值为任意类型的所有方法,参数可有可无,个数不限定@Pointcut("execution (* cn.itcast.service.impl.PersonServiceBean.*(..))")private void anyMethod() {}// 声明一个切入点,用一个方法表示@Before("anyMethod() && args(name)")public void doAccessCheck(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 {// if(){//判断用户是否在权限System.out.println("进入方法");Object result = pjp.proceed();System.out.println("退出方法");// }return result;}}

?

?

package junit.test;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.itcast.service.PersonService;public class SpringAOPTest {@Testpublic void interceptorTest() {ApplicationContext cxt = new ClassPathXmlApplicationContext("beans.xml");PersonService personService = (PersonService) cxt.getBean("personService");personService.save("xxx");}}

?

<?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">        <!-- 启动对@AspectJ注解的支持  -->        <aop:aspectj-autoproxy/>         <bean id="myInterceptor" class="cn.itcast.service.impl.PersonServiceBean"></bean></beans>

??

?

热点排行