一、 日志管理
1.日志管理是一种典型的系统级别的应用,非常适合使用spring AOP实现。
2.使用日志管理的目的:对系统修改的动作进行记录,比如对权限、角色、用户的写操作、修改操作、删除操作等
3.确定使用的通知方式:使用环绕通知。复习一下环绕通知,所谓环绕通知实际上就是AOP代理对接口中声明方法的执行进行拦截,在执行方法之前或者之后进行一些操作,在日志管理功能模块中,我们对Service接口中声明的方法进行拦截,如果是对系统进行的修改操作的方法,则将方法执行之后就需要将相关信息保存下来方便以后查看,比如是谁登陆的系统进行的修改(最重要),执行的是什么方法,方法的参数是什么,执行成功额还是失败了,方法的返回值是什么,执行方法的时间是什么等等。
4.日志管理功能在系统中的体现:单击导航菜单中的"日志管理"超链接,查看所有的系统的变更历史记录
二、aop原理
/1.面向切面(方面)编程
2.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率
- AOP底层使用动态代理 来实现
4.连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是表示一个方法的执行。通俗的说就是加入切点的那个点
通知(Advice):在切面的某个特定的连接点上执行的动作。其中包括了“around”、“before”和“after”等不同类型的通知(通知的类型将在后面部分进行讨论)。许多AOP框架(包括Spring)都是以拦截器做通知模型,并维护一个以连接点为中心的拦截器链。
切入点(Pointcut):匹配连接点的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。
引入(Introduction):用来给一个类型声明额外的方法或属性(也被称为连接类型声明(inter-type declaration))。Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用引入来使一个bean实现IsModified接口,以便简化缓存机制。
织入(Weaving):将切面应用到目标对象来创建新的代理对象的过程。这些可以在编译时(例如使用AspectJ编译器),类加载时和运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。
增强(Advice):是织入到目标类连接点上的一段程序代码。Spring使用增强类定义横切逻辑,同时由于Spring只支持方法连接点,增强还包括了在方法上的哪一点加入横切代码的方位信息,所以增强既包括横切逻辑、还包含部分连接点的信息。
引介(Introduction):是一种特殊的增强,为类添加一些属性和方法。
切面(Advisor):代表一般切面,包含了横切代码和连接点信息,本身是一个简单的切面,横切的连接点是目标类的所有方法。3种类型:一般切面(advisor)、切点切面(PointcutAdvisor)、引介切面(IntroductionAdvisor)。
- JDK的动态代理主要涉及java.lang.reflect包中的两个类:Proxy和InvocationHandler。其中InvocationHandler只是一个接口,可以通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态的将横切逻辑与业务逻辑织在一起。而Proxy利用InvocationHandler动态创建一个符合某一接口的实例,生成目标类的代理对象。(只能为接口创建代理实例)
Kafka
zookeeper作为解决分布式一致性问题的工具而被kafka依赖。而分布式模式,即去中心化的集群模式,需要让消费者知道现在有哪些生产者(对于消费者而言,kafka就是生产者)是可用的。如果没了zk消费者如何知道呢?如果每次消费者在消费之前都去尝试连接生产者测试下是否连接成功,效率就会变得很低。
Kafka使用zk的分布式协调服务,将生产者,消费者,消息储存(broker,用于存储信息,消息读写等)结合在一起。同时借助zk,kafka能够将生产者,消费者和broker在内的所有组件在无状态的条件下建立起生产者和消费者的订阅关系,实现生产者的负载均衡。
- Aop+kafka模块封装好处?
1.Aop实现原理:
AOP的实现原理是动态代理,讲到动态代理之前先说一下代理模式, 代理模式是指给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
2.AOP的常用通知:
前置通知 方法执行前调用 对应注解 @Before
后置通知 方法执行后调用 对应注解 @After
返回通知 方法返回后调用 对应注解 @AfterReturning
异常通知 方法出现异常调用 对应注解 @AfterThrowing
环绕通知 动态代理、手动推荐方法运行 对应注解 @Around
3.kafka的优势
1.高吞吐量:据说 每秒可以生产约 25 万消息(50 MB),每秒处理 55 万消息(110 MB在消息只支持持久化模式下能达到这么高的吞吐量已经相当可观了
2.高可用性:kafka只支持数据持久存储,并且可以灵活配置数据备份模式及应答模式,有很高的可用性
3.高可扩展性:kafka基于zookeeper的,broker可以灵活扩展
4.消息被处理在consumer维护,而不是在server端,消费失败可以灵活处理
4.使用kafka的好处是什么:异步处理,流量控制,服务解耦
使用aop与kafka的封装模块的好处就是可以降低耦合度,使用kafka作为中间件也可以解决消息堆积,预防消息的丢失,以确保消息的完整性.