面向切面編程
自訂切面
package cn.csdn.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 {@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;}}
Dao類:
package cn.csdn.service;public interface PersonService {public void save(String name);public void update(String name, Integer id);public String getPersonName(Integer id);}
DaoImpl類:
package cn.csdn.service.impl;import cn.csdn.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()方法");}}
bean.xml設定檔:
<?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/beanshttp://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/> <bean id="myInterceptor" class="cn.csdn.service.MyInterceptor"/> <bean id="personService" class="cn.csdn.service.impl.PersonServiceBean"></bean></beans>
測試類別Test:
package junit.test;import org.junit.BeforeClass;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.csdn.service.PersonService;public class SpringAOPTest {@BeforeClasspublic static void setUpBeforeClass() throws Exception {}@Test public void interceptorTest(){ApplicationContext cxt = new ClassPathXmlApplicationContext("beans.xml");PersonService personService = (PersonService)cxt.getBean("personService");personService.save("xx");}}