Spring-通過xml配置檔案實現切面(AOP)
阿新 • • 發佈:2019-02-18
使用註解的方式實現AOP:
1、業務類
PersonService.java
2、業務實現
PersonServiceimpl.java
3、註解實現
MyInterceptor.java
4、配置檔案
bean.xml
SpringAOPTest.java
1、業務類
PersonService.java
/*
*@Author swxctx
*@time 2016年9月22日
*/
package com.sw.service;
public interface PersonService {
//業務方法
public void save(String name);
public void update(String name,Integer id);
public String getPersonName();
}
2、業務實現
PersonServiceimpl.java
/* *@Author swxctx *@time 2016年9月22日 */ package com.sw.serv.impl; import com.sw.service.PersonService; public class PersonServiceimpl implements PersonService { //業務實現 @Override public void save(String name) { // TODO Auto-generated method stub System.out.println("save-method-execute"); } @Override public void update(String name, Integer id) { // TODO Auto-generated method stub System.out.println("update-method-execute"); } @Override public String getPersonName() { // TODO Auto-generated method stub return "xxx"; } }
3、註解實現
MyInterceptor.java
/* *@Author swxctx *@time 2016年9月22日 */ /* *@Author swxctx *@time 2016年9月22日 */ package com.sw.service; import org.aspectj.lang.ProceedingJoinPoint; //宣告為切面 public class MyInterceptor { // @Pointcut("execution(*com.sw.serv.impl.PersonServiceimpl.*(..))") // private void anyMethod(){}//宣告一個切入點 // @Before("anyMethod()&&args(name)") public void doAccessCheck(String name) {//定義前置通知 System.out.println("前置通知"); } // @AfterReturning("anyMethod()") public void doAfterReturning(){ System.out.println("後置通知"); } // @After("anyMethod()") public void doAfter(){ System.out.println("最終通知"); } // @AfterThrowing("anyMethod()") public void doAfterThrow(){ System.out.println("例外通知"); } // @Around("anyMethod()") public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable{ System.out.println("進入方法");//環繞通知 Object result = pjp.proceed(); System.out.println("退出方法"); return result; } }
4、配置檔案
bean.xml
5、測試<?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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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="com.sw.service.MyInterceptor"/> <bean id="personService" class="com.sw.servicce.PersonService"/> <aop:config> <!-- 定義切面 --> <aop:aspect id="my" ref="myInterceptor"> <!-- 定義切入點 --> <aop:pointcut expression="execution(*com.sw.serv.impl.PersonServiceimpl.*(..))" id="mycut"/> <!-- 前置通知 --> <aop:before method="doAccessCheck" pointcut-ref="mycut"/> <!-- 後置通知 --> <aop:after-returning method="doAfterReturning"/> <!-- 最終通知 --> <aop:after method="doAfter"/> <!-- 例外通知 --> <aop:after-throwing method="doAfterThrow"/> <!-- 環繞通知 --> <aop:around method="doBasicProfiling"/> </aop:aspect> </aop:config> </beans>
SpringAOPTest.java
/*
*@Author swxctx
*@time 2016年9月22日
*/
package com.sw.iunit.test;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.sw.service.PersonService;
public class SpringAOPTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@Test
public void interceptorTest() {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
PersonService personService = (PersonService)ctx.getBean("personService");
personService.save("xxx");
}
}