在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,经过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP能够对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度下降,提升程序的可重用性,同时提升了开发的效率。java
对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点web
类是对物体特征的抽象,切面就是对横切关注点的抽象apache
被拦截到的点,由于Spring只支持方法类型的链接点,因此在Spring中链接点指的就是被拦截到的方法,实际上链接点还能够是字段或者构造器编程
对链接点进行拦截的定义api
所谓通知指的就是指拦截到链接点以后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类session
代理的目标对象多线程
将切面应用到目标对象并致使代理对象建立的过程app
在不修改代码的前提下,引入能够在运行期为类动态地添加一些方法或字段框架
首先须要拿一个SSM的项目demo来测试,这个不会的先别看了函数式编程
项目的大体结构:
log4j.appender.appenderName=??
- org.apache.log4j.ConsoleAppender(控制台)
- org.apache.log4j.FileAppender(文件)
- org.apache.log4j.DailyRollingFileAppender(天天产生一个日志文件)
- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
log4j.appender.appenderName.layout = ??
- org.apache.log4j.HTMLLayout(以HTML表格形式布局)
- org.apache.log4j.PatternLayout(能够灵活地指定布局模式)
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
Threshold=DEBUG:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着全部的消息都会被当即输出。
Target=System.err:默认状况下是System.out,指定输出控制台
Threshold=DEBUG:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着全部的消息都会被当即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增长到指定文件中,false指将消息覆盖指定的文件内容。
Threshold=DEBUG:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着全部的消息都会被当即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增长到指定文件中,false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀能够是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定能够产生的滚动文件的最大数。
-X号: X信息输出时左对齐;
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也能够在其后指定格式,好比:%d{yyy MMM dd HH:mm:ss,SSS},输出相似:2002年10月18日 22:10:28,921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目,一般就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,至关于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤为用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个”%”字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,Windows平台为”\r\n”,Unix平台为”\n”输出日志信息换行
引用博客地址:http://blog.csdn.net/foreverling/article/details/51385128
这里只是简单的列出controller的,service能够在Spring层配置 这个想要知道为何分开的能够看我以前的一篇博客 关于二者的区别
能够根据本身的喜爱和项目的需求设置
JoinPoint对象封装了SpringAop中切面方法的信息,在切面方法中添加JoinPoint参数,就能够获取到封装了该方法信息的JoinPoint对象.
经常使用api:
方法名 | 功能 |
---|---|
Signature getSignature(); | 获取封装了署名信息的对象,在该对象中能够获取到目标方法名,所属类的Class等信息 |
Object[] getArgs(); | 获取传入目标方法的参数对象 |
Object getTarget(); | 获取被代理的对象 |
Object getThis(); | 获取代理对象 |
OK这样日志的一套配置流程就这样,还有其余的形式不少,如注解形式,不少,本人初入来点小结,其实事物也能够如此形式改造,同理
【版本声明】本文为博主原创文章,转载请注明出处