Spring学习第三天AOP配置与开发 (1)

AOP的相关术语:

  • Joinpoint(连接点) :连接点是指那些被拦截到的点。在Spring中,点指的是方法,因为Spring只支持方法类型的连接点(可以对所有方法进行拦截)
  • Pointcut(切入点):切入点是指我们要对哪些Joinpoint进行拦截的定义 (比如一个实现类中多个方法,对某个方法增强就是切入点)
  • Advice(通知/增强):通知是指拦截到的Joinpoint之后所要做的事情。通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
  • Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下,Introduction可以在运行期为类动态地添加一些方法
  • Target(目标对象):是指代理的目标对象
  • Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程
  • Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类
  • Aspect(切面):是切入点和通知的结合

AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待等。

通知注解类型如下:

  1. @Before:前置通知
  2. @AfterReturing:后置通知
  3. @Around:环绕通知
  4. @After:最终通知
  5. @AfterThrowing:异常抛出通知

下面例子: 

public class CustomerDaoImpl implements CustomerDao{
	@Override
	public void save() {
		System.out.println("保存客户。。。");	
	}
	@Override
	public void update() {
	    System.out.println("修改客户。。。");
	}
}

我们使用AOP切面技术在CustomerDaoImpl的save方法之前引入日志:

首先我们先创建一个切面类:

/*
 * 切面类:切 入点+通知
 */
public class MyAspectXml {
	 //通知(具体的增强)
	public void log() {
		System.out.println("记录日志...");
	}	
}

接下来我们在容器中配置AOP,在aop配置中,要引入ref="切面类",如果要想把日志在类之前输出就使用 before 关键字。

pointcut 记得要引入类的全路径。 代码通用。

<!-- 配置客户的Dao -->
<bean id="customerDao" class="com.Spring5AOP.CustomerDaoImpl"></bean>

<!--配置切面类 -->
<bean id="myAspectXml" class="com.Spring5AOP.MyAspectXml"></bean>

<!-- 配置AOP -->
<aop:config>
	<!-- 配置切面类:切入点+通知 -->
	<aop:aspect ref="myAspectXml">  <!-- 引入切面类 -->
		<!-- 配置的是前置通知,save方法执行之前,增强的方法会执行 -->
		<!-- 切入点表达式:execution (public void com.Spring5AOP.CustomerDaoImpl.save()) -->
        <!-- 1.execution() 固定的,不能不写
             2.public 可以省略不写
             3.void ,返回值可以出现*--->
		<aop:before method="log"  pointcut="execution (public void com.Spring5AOP.CustomerDaoImpl.save())"/>
	</aop:aspect>
</aop:config>

注:切入点表达式

  1. execution() 固定的, 不能不写
  2. public 可以省略不写
  3. void,返回值可以出现* 表示任意的返回值,返回值类型不能不写
  4. 可以使用 * 代替,不能不编写的,简写方式:*..*方法

最后创建测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext3.xml")
public class AOP_Test {
	@Resource(name="customerDao")
	private CustomerDao customerDao;	
	
	@Test
	public void run2() {
		customerDao.save();
		customerDao.update();
	}
}

结果输出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值