Spring -aop通知实例

aop词解

切面 Aspect
对横切性关注点的模块化。
通知 Advice
对横切性关注点的具体实现。
切入点 Pointcut
它定义了Advice应用到哪些JoinPoint上,对Spring来说是方法调用。
连接点 JoinPoint
Advice在应用程序上执行的点或时机,Spring只支持方法的JoinPoint,这个点也可以使属性修改,如:Aspecj可以支持。
织入 Weave
将Advice应用到Target Object上的过程叫织入,Spring支持的是动态织入。
目标对象 Target Object
Advice被应用的对象。
代理 Proxy
Spring AOP默认使用JDK的动态代理,它的代理是运行时创建,也可以使用CGLIB代理。

定义:

Spring AOP(面向方面编程)框架,用于在模块化方面的横切关注点。简单得说,它只是一个拦截器拦截一些过程,例如,当一个方法执行,Spring AOP 可以劫持一个执行的方法,在方法执行之前或之后添加额外的功能。

增强或通知

Spring支持五种类型的增强或通知(Advice):

Before(方法执行前) org.apringframework.aop.MethodBeforeAdvice

AfterReturning(方法返回后) org.springframework.aop.AfterReturningAdvice

After-throwing(异常抛出后) org.springframework.aop.ThrowsAdviceArround

环绕,即方法前后org.aopaliance.intercept.MethodInterceptor

引介,不常用org.springframework.aop.IntroductionInterceptor

实例:

需要实现相关的接口
public class AfterAdvice implements AfterReturningAdvice {
	private static Logger logger = LogManager.getLogger(AfterAdvice.class);
	@Override
	public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable {
		logger.info("对业务代码进行自动日志记录");
	}

}


描述连接点是进行AOP编程最主要的一项工作。增强提供了连接点方位信息:如织入到方法前面、后面等,而切点进一步描述织入到哪些类的哪些方法上。




xml配置文件
	<!-- 目标对象 -->
 <bean id="student" class="com.java1704.spring.aop.server.Student"></bean>

	<!-- 通知 -->
	<bean id="afterAdvice" class="com.java1704.spring.aop.advice.AfterAdvice"></bean>
	<bean id="securety" class="com.java1704.spring.aop.advice.Securety"></bean>
	<bean id="beforeAdvice" class="com.java1704.spring.aop.advice.BeforeAdvice">
		<property name="securety" ref="securety"></property>		
	</bean>

<!--顾问 advisor  切点和通知组成的配置器-->
	<bean id="pointcutAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
		<property name="pattern" value="com\.java1704\.spring\.aop\.server\.Student\..*"></property>	<!-- 切点 -->
		<property name="advice" ref="beforeAdvice"></property>		
	</bean>
<!-- 代理工厂  -->
	<bean id="ProxyFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="target" ref="student"></property>   <!--需要执行的bean ,直接调用 ProxyFactory即可-->
		<property name="interceptorNames">
			<list>
				<value>pointcutAdvisor</value>  <!--这里可以时advice(切点) ,也可以是advisor(配置器)-->
			</list>
		</property>
	</bean>
测试代码:调用配置的代理工厂
	@Test
	public void test() {
		ApplicationContext context=new ClassPathXmlApplicationContext("spring-core2.xml");
		Student student= (Student) context.getBean("ProxyFactory");
		student.addStudent();
	}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值