Java 10.Spring--AOP编程

1.创建web项目

2.引入jar包

在原有的jar包加上AOP的jar包

3.日志

 

4.准备目标对象

先创建接口

在创建实现类

 

package com.Spring.aop.service;

public class UserServceImpl implements UserService {

	@Override
	public void save() {
		System.out.println("保存用户");
		// TODO Auto-generated method stub
		
	}

	@Override
	public void delete() {
		System.out.println("删除用户");
		// TODO Auto-generated method stub
		
	}

	@Override
	public void update() {
		System.out.println("更新用户");
		// TODO Auto-generated method stub
		
	}

	@Override
	public void select() {
		System.out.println("查询用户");
		// TODO Auto-generated method stub
		
	}
	 

}

 

  

 

 

5.编写通知

前置通知:在目标方法之前调用

后置通知(如果出现异常就不调用):在目标方法之后调用

后置通知(无论是否出现异常都会调用):在目标方法之后调用

环绕通知:在目标方法之后调用

异常通知:出现异常调用

package com.Spring.aop.advice;

import org.aspectj.lang.ProceedingJoinPoint;

public class TransactionAdvice {
//	前置通知:在目标方法之前调用
//
//	后置通知(如果出现异常就不调用):在目标方法之后调用
//
//	后置通知(无论是否出现异常都会调用):在目标方法之后调用
//
//	环绕通知:在目标方法之后调用
//
//	异常通知:出现异常调用
	public void before() {
		System.out.println("前置通知被执行");
	}
	
	public void afterReturning() {
		System.out.println("后置通知(如果出现异常就不调用)");
		
	}
	public void after() {
		System.out.println("后置通知(无论是否出现异常都会调用)");
		
	}
	public void afterException() {
		System.out.println("异常通知被执行");
	}
	public Object around(ProceedingJoinPoint point) throws Throwable {
		System.out.println();
		Object proceed = point.proceed();
		return proceed;
		
	}

}

  

 

6.配置织入,将通知织入到目标对象

加入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.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop 
        https://www.springframework.org/schema/aop/spring-aop.xsd"
        >
		
		
		<!-- 目标对象 -->
       	<bean name="userServce" class= "com.Spring.aop.service.UserServceImpl"></bean>
		<!-- 通知对象 -->
		<bean name="transactionAdvice" class= "com.Spring.aop.advice.TransactionAdvice" ></bean>
		<!-- 将通知对象织入到目标对象 -->
		<aop:config>
			<!-- 选择切入点 -->
			<aop:pointcut expression="execution(. com.Spring.aop.service..*ServceImpl.*(..))" id="pointcut"/>
			<aop:aspect ref="transactionAdvice">
				<aop:before method="before" pointcut-ref="pointcut"/>
				<aop:after-returning method="afterReturning"/>
				<aop:after method="after" pointcut-ref="pointcut"/>
				<aop:around method="around" pointcut-ref="pointcut"/>
				<aop:after-throwing method="afterException" pointcut-ref="pointcut"/>
			</aop:aspect>
			
		</aop:config>
       	
       	
</beans>

 

  

 

 

7.测试

 

package com.Spring.aop.service;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class AopTest {
	@Resource(name="userService")
	private UserService userService; 
	
	@Test
	public void testSave() {
		userService.save("yu jack");
	}
	
	@Test
	public void testUpdate() {
		userService.update();
	}
	
}

 

  

posted @ 2020-01-09 15:57  Recruited  阅读(161)  评论(0)    收藏  举报
个人网站:www.yuzhenfu.cn