spring 05自定义

第一步 增加maven一依赖
pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.spring05</groupId>
	<artifactId>spring05_custom_aop</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<!--版本管理 -->
	<properties>
		<spring.version>4.1.3.RELEASE</spring.version>
		<aspectj.version>1.6.11</aspectj.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<!--测试包,自动生成 -->
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<!--spring aop依赖 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!--spring上下文包,在加载spring配置文件时用到 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!--使用AspectJ方式注解需要相应的包 -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${aspectj.version}</version>
		</dependency>
		<!--使用AspectJ方式注解需要相应的包 -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>${aspectj.version}</version>
		</dependency>

	</dependencies>
</project>

第二步 编写 UserDao
UserDao.java

package org.spring05;

public interface UserDao {
	void add();
	void delete();
}

第三步 编写 UserDaoImpl
UserDaoImpl.java

package org.spring05;

/**
 * 用户类(领域业务对象类)
 * @author yxl
 *
 */
public class UserDaoImpl implements UserDao {
	public void add() {
		//int i=3/0;
		System.out.println("增加了一个用户!");
	}
	public void delete() {
		System.out.println("删除了一个用户!");
	}
}

第四步 编写切面类Log
Log.java

package org.spring05;

import java.lang.reflect.Method;

import org.aopalliance.intercept.MethodInvocation;
import org.aspectj.lang.JoinPoint;

/**
	切面类 (公共业务类) 自定义方式实现不用继承任何类

 */
public class Log {

	/**
	 * 前置通知
	 * @param method 被调用对象的方法
	 * @param args  被调用的方法参数
	 * @param target 被调用的方法的目标对象
	 */
	public void myBefore(JoinPoint joinPoint) throws Throwable {
		System.out.println("前置通知:");
	}
	
	/**
	 * 后置通知
	 */
	public void myAfter(JoinPoint joinPoint) throws Throwable {
		System.out.println("后置通知");
	}

	/**
	 * 环绕通知
	 */
	public Object invoke(MethodInvocation arg0) throws Throwable {
		System.out.println("环绕通知开始");
		Object result=arg0.proceed();
		System.out.println("环绕通知结束");
		return result;
	}
	
	/**
	 * 增强处理 返回后通知 
	 * 增强处理将在目标方法正常完成后被织入
	 * @param joinPoint
	 */
	public void myAfterReturning(JoinPoint joinPoint){
		System.out.println("增强处理 返回后通知");
	}
	/**
	 * 异常通知
	 */
	public void myThrowing(JoinPoint joinPoint,Exception e) throws Throwable {
		System.out.println("后置通知");
	}
	
	
}

第五步 编写spring配置文件
beans.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/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-3.1.xsd  
           ">
    <bean id="userDaoImpl" class="org.spring05.UserDaoImpl"/>
    <bean id="log" class="org.spring05.Log"></bean>
    <aop:config>
    	<aop:aspect ref="log">
			<!-- 配置(连接点)关注点。指哪些业务方法需要增加公共的功能方法。 expression:匹配规则,第一个*代表返回值。参数括号里面的两个.. 表示所有参数。 -->
			<aop:pointcut id="pointcut" expression="execution(public * org.spring05.*.*(..))"/>
    		<!-- 前置通知 -->
    		<aop:before method="myBefore" pointcut-ref="pointcut"/>
    		<!-- 后置通知 -->
    		<aop:after method="myAfter"  pointcut-ref="pointcut"/>
    		<!-- AfterReturning 增强处理将在目标方法正常完成后被织入。 -->
    		<aop:after-returning method="myAfterReturning" pointcut-ref="pointcut"/>
    		<!-- 异常通知:在方法抛出异常后调用通知 -->
    		<aop:after-throwing method="myThrowing" pointcut-ref="pointcut" throwing="e"/>
    	</aop:aspect>
	</aop:config>
	
	
</beans>

第六步 编写测试类
Test.java

package org.spring05;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
	public static void main(String[] args) {
		ApplicationContext app = new ClassPathXmlApplicationContext("beans.xml");
		UserDao userDao = (UserDao) app.getBean("userDaoImpl");
		userDao.add();

	}
}
 

控制台结果

前置通知:
增加了一个用户!
后置通知
增强处理 返回后通知

猜你喜欢

转载自blog.csdn.net/shenlanse7626/article/details/84102285
今日推荐