Spring的AOP的基于AspectJXML开发

1 约束

<?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" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- bean definitions here -->

</beans>

2 编写接口方法和配置

编写接口

public interface ProductDao {
	public void save();
	public void update();
	public void find();
	public void delete();
}

编写目标类

public class ProductDaoImpl implements ProductDao {

	@Override
	public void save() {
		// TODO Auto-generated method stub
		System.out.println("执行了save方法");
	}

	@Override
	public void update() {
		// TODO Auto-generated method stub
		System.out.println("执行了update方法");
	}

	@Override
	public void find() {
		// TODO Auto-generated method stub
		System.out.println("执行了find方法");
	}

	@Override
	public void delete() {
		// TODO Auto-generated method stub
		System.out.println("执行了delete方法");
	}
}

spring中的配置

<bean name="productDao" class="com/spring/demo1/ProductDaoImpl.java"></bean>

编写测试类

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 SpringDemo1 {
	
	@Resource(name="productDao")
	private ProductDao productDao;
	
	@Test
	public void Demo1(){
		productDao.save();
		productDao.update();
		productDao.find();
		productDao.delete();
	}
}

编写切面类

public class MyAspectXML {
	
	public void checkPri(){
		System.out.println("权限校验============");
	}
} 

配置

<!-- 将切面类交给spring管理 -->
<bean id="myAspectXML" class="com.ithei.xu.spring.demo1.MyAspectXML"></bean>

通过AOP的配置对目标类产生代理

	<!-- 通过AOP的配置对目标类产生代理 -->
	<aop:config>
		<!-- 表达式来配置哪些类的哪些方法需要进行增强 -->
		<aop:pointcut expression="execution(* com.xu.spring.demo1.productDaoImpl.save(..))" id="pointcut1"/>
		<!-- 配置切面 -->
		<aop:aspect ref="myAspectXML">
			<aop:before method="checkPri" pointcut-ref="pointcut1"/>
		</aop:aspect>
	</aop:config>

3 spring中的通知类型

3.1前置通知
  • 在目标方法执行之前进行操作
  • 获得切入点的信息
  • <aop:before method="" pointcut-ref=""/>
3.2后置通知
  • 在目标方法执行之后进行操作
  • 获取切入点信息,还可以获得方法返回值
  • <aop:after-returning method="" pointcut-ref="" returning=""/>
3.3环绕通知
  • 在目标方法执行之前和之后进行操作
  • 可以阻止目标方法的执行
  • <aop:around method="" pointcut-ref=""/>
3.4异常抛出通知

在目程序出现异常的时候进行操作

  • <aop:after-throwing method="" pointcut-ref="" throwing/>
3.4最终通知

在目程序无论是否出现异常,都进行操作

  • <aop:after method="" pointcut-ref=""/>

4、spring中切入点表达式

  • 语法
    • 基于execution的函数完成
      • [访问修饰符] 方法返回值 包名.类名.方法名(参数)

猜你喜欢

转载自blog.csdn.net/qq_43642812/article/details/84798215
今日推荐