面向切面编程的学习(入门)

什么是面向切面?

面向切面是面向对象的补充,怎么理解呢?在程序的功能中可以分为两类:核心功能(登陆、注册、增删改等)、辅助功能(日志、性能统计、事务管理)。辅助功能就是在面向对象编程思想中就被定义为切面,你可以理解为一个横切面,几乎每个核心功能都会涉及到。

例如:核心功能不依赖于辅助功能就能够运行,但是辅助功能的加入会使得我们的程序更容易维护、管理,所以面向切面是面向对象的补充,使得程序更加的完整、可维护。

切面编程(简单实践)

第一步:编写业务类

public void doSomeService() {

		for (long i = 0;; i++) {
			if (i == 1000) {
				break;
			} else {
				System.out.println("this is" + i);
				continue;
			}
		}
		System.out.println("结束循环");
	}

第二步:编写切面类

public class Aspect {

	public Object asp(ProceedingJoinPoint joinPoint) throws Throwable {
		System.out.println("方法start:" + joinPoint.getSignature().getName());
		long start = System.currentTimeMillis();
		Object object = joinPoint.proceed();
		long end = System.currentTimeMillis();
		System.out.println("方法end:" + joinPoint.getSignature().getName());
		System.out.println("执行了多长时间" + (end - start));
		return object;
	}

}

第三步:添加切面配置

将以下配置代码添加到applicationContext.xml文件中

<!-- 将业务类注入到spring容器 -->
	<bean id="s" class="spring.ProductService"></bean>


	<!-- 将切面类注入到spring容器 -->
	<bean id="aspect" class="spring.Aspect"></bean>

	<aop:config>
		<!--设置切入点 -->
		<aop:pointcut
			expression="execution(* spring.ProductService.*(..))" id="Cutpoint" />
		<!-- 设置切面 -->
		<aop:aspect id="testAspect" ref="aspect">
			<aop:around method="asp" pointcut-ref="Cutpoint" />
		</aop:aspect>
	</aop:config>

第四步:编写测试类

public static void main(String[] args) {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
				new String[] { "applicationContext.xml" });
		ProductService s = (ProductService) applicationContext.getBean("s");
		s.doSomeService();	
	}

测试结果:

为了能看到实际输出的语句,我将循环次数减少到了10次。

方法start:doSomeService
this is0
this is1
this is2
this is3
this is4
this is5
this is6
this is7
this is8
this is9
结束循环
方法end:doSomeService
执行了多长时间1

通过输出语句我们可以看到在调用方法时触发了切入点,然后就会进入到切面类中输出方法start,接着运行方法本身的方法,在方法结束后又回到了切面类中输出方法end。

面向切面编程使得核心功能和辅助功能可以分开独立开发,然后再通过配置来让它们交织在一起。

面向切面编程有什么用?

①性能监测:可以通过切面来记录调用业务方法的时间消耗,以此来作为优化代码的参考标准。

②日志记录:对于重要的方法调用,在适当位置进行切面记录日志使得后期更容易维护和定位错误。

③事务管理:有的方法在执行过程中需要加入到事务管理,也可以通过切面编程来完成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值