二、Spring-AOP

一、面向切面编程

  • 目的:把应用在各处的功能分离出来,使其成为可重用的组件
  • Spring AOP把业务看作两类:核心关注点和横切关注点
    1. 核心关注点:核心业务
    2. 横切关注点:经常融入到核心业务中的系统服务。如日志、事务管理、安全

  • Spring AOP工作原理:AOP使横切关注点模块化,将其与核心业务逻辑相分离。


二、实例

  • 注意:加入Spring的依赖包

1、IA接口

package one.aop;

public interface IA {
	public void print();
}

2、A类-核心业务

package one.aop;

public class A implements IA{
	
	public void print() {
//		b.printBefore();  //打印前调用
		System.out.println("调用A类的print方法");
//		b.printAfter();
	}
	
}
  • 这里本应调用B类的函数,使用AOP切入了

3、B类-横切关注点

package one.aop;

public class B {
	
	public void printBefore() {
		System.out.println("打印之前调用");
	}
	
	public void printAfter() {
		System.out.println("打印之后调用");
	}
}

4、切面配置-one_aop_config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/aop 
	   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
   
   <bean id="a" class="one.aop.A">
   </bean>
   
   <bean id="b" class="one.aop.B">
   </bean>
   
   <aop:config>
      <aop:pointcut id="embark"
          expression="execution(* one.aop.A.print(..))"/>
    <aop:aspect ref="b">
        
      <aop:before pointcut-ref="embark" 
          method="printBefore"/>

      <aop:after pointcut-ref="embark" 
          method="printAfter"/>
    </aop:aspect>
  </aop:config>
   
</beans>

  • 注意先注入id为b的bean,因为切面引用到
  • <aop:config>:为切面配置
  • <aop:pointcut>:为切点配置,expression中的为A类的print方法,即在该方法插入B类的方法
  • <aop:before>:在执行A类的print方法执行

5、运行类

package one.aop;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class myMain {
	
	public static void main(String[] args) {
		ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("one_aop_config.xml");
		IA a= (IA) context.getBean(IA.class); 	//一定要是接口
		a.print();
		
		context.close();
	}
} 

  • 这里要注意的是,获取的Bean一定要是接口,不然会报错。仅仅是注入依赖就可以是类。


三、项目下载

    如果再不行就去下载项目吧,里面有AOP的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值