AOP成功面向切面编程-经常使用Java
简介
面向切面编程(AOP)是一种编程思维,它将程序中的关注点分别,使得开发人员可以专一于外围业务逻辑而不用过多关注横切关注点。中的AOP可以经过经常使用AspectJ等框架来成功,本文将引见如何经常使用JavaAOP成功切面编程的基本概念和代码示例。
一、概念引见:
二、代码示例:
上方是一个繁难的JavaAOP示例,展现了如何成功日志记载的横切关注点:
publicclassUserService{publicvoidaddUser(Stringusername){//参与用户的外围业务逻辑System.out.println("参与用户:"+username);}}
publicclassLoggingAspect{//前置通知,在方法调用前口头publicvoidbeforeAdvice(){System.out.println("前置通知:预备口头方法");}//后置通知,在方法调用后口头publicvoidafterAdvice(){System.out.println("后置通知:方法口头终了");}}
importorg.aspectj.lang.JoinPoint;importorg.aspectj.lang.annotation.*;@AspectpublicclassLoggingAspect{@Before("execution(*UserService.*(..))")publicvoidbeforeAdvice(JoinPointjoinPoint){System.out.println("前置通知:预备口头方法");}@After("execution(*UserService.*(..))")publicvoidafterAdvice(JoinPointjoinPoint){System.out.println("后置通知:方法口头终了");}}
importorg.springframework.context.licationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassMn{publicstaticvoidmain(String[]args){ApplicationContextcontext=newClassPathXmlApplicationContext("applicationContext.xml");UserServiceuserService=(UserService)context.getBean("userService");userService.addUser("Alice");}}
运转程序后,输入应为:
前置通知:预备口头方法参与用户:Alice后置通知:方法口头终了
总结
本文示例展现了如何经常使用JavaAOP成功面向切面编程,以日志记载为例。经过创立切面类、定义切点和通知,而后经常使用AspectJ注解和Spring性能文件启动性能,最终成功了在外围业务逻辑中参与日志记载的性能。经常使用AOP可以将横切关注点与外围业务逻辑启动解耦,提高代码的可保养性和裁减性。
谁能解释一下java面向切面编程的思想 以及具体的使用方式
面向切面编程(AOP),就是关注程序运行的过程,切面就是要把方法切开,分别执行前,执行中,执行后(可能更细化)等多个步骤,分别针对这三个阶段进行处理。以获得逻辑过程中各部分之间低耦合性的隔离效果。
具体使用场景:
spring中的aop 是怎么面向切面编程的
Spring面向切面编程(AOP)
1 spring容器中bean特性
Spring容器的javabean对象默认是单例的。
通过在xml文件中,配置可以使用某些对象为多列。
Spring容器中的javabean对象默认是立即加载(立即实例化:spring加载完成,立即创建对象)
scope:属性
singleton:默认值为单例,默认也是立即加载,在加载完成spring容器的时候,bean对象已经创建完成
prototype:多例的,默认懒加载,spring容器加载完成的时候,不会创建bean的对象,只有从容器获得bean对象的时候,才进行bean对象的实例化
request: 将创建的javabean对象,封装到request范围
session:将创建的javabean对象,封装到session范围
Spring容器bean的对象生命周期:
Bean对象的创建一直到销毁为bean的生命周期。
生命周期的开始:
如果为单例,由加载完spring容器开始
如果为多例,由从容器获得bean对象开始
实例化
初始化
服务
销毁(单例:关闭容器的时候,多例由jvm自动回收)
2 spring的AOP面向切面编程
2.1 模拟银行转账业务
需求:实现银行的转账功能,在转账的时候需要完成
1 身份认证(登陆)
2 权限的验证
3 转账实现
4 历史交易记录,
分析:1,2,4三个功能对于银行的业务,属于公共的功能(共性的功能)
在功能实现的时候,需要将1,2,4抽取出来,单独实现,
做到了将共性的功能和核心的业务功能进行了分离
通过动态代理实现:共性的功能和核心业务功能的合并,产生核心业务对象的
在代码实现的时候,进行了功能实现的分离:
代码开发的进行分离,程序在运行的时候进行合并。
2.2 springAOP的思想
在系统开发中,将系统的共性的公共的功能独立实现,在程序运行的过程中,将共性功能和核心的业务功能,进行整合。
好处:
1 完成共性功能和核心业务功能的解耦合
2 提供共性功能的复用性。
2.3springAOP的概念
Aspect切面:封装共性功能的(增强功能的)类
Advice通过:切面类中封装的增强功能的方法。
PointCut:切入点,是一个集合的概念,该集合的表达使用一个正则表达式表达
所有核心业务对象的所有方法的前后(事务处理AOP典型的应用)
JoinPoint:连接点,程序中需要加入advice的地方,而且正在执行的ponitCut
织入(Weaving):将aspect和核心业务对象,进行整合的过程。
3 springAOP的实现
3.1通过特定接口实现
Aop通知的类型:
Before:前置通知
After:后置通知
Around:环绕通知
Throwing:异常通知
需求:实现在业务对象中的方法执行的时候,记录日志功能
3.1.1前置通知
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。