在Spring项目中的另外一个核心便是AOP,那么什么是AOP呢?
我们通常开发都是OOP流程化的开发,上层向下发送请求,底层向上提供服务。但是有些服务或者功能却是需要嵌套在某些服务中,或者嵌套在多个服务中, 那么这个时候就需要用到AOP切面了。
在Spring最初用到的AOP中是通过:
<aop:config>
<aop:aspect id="time" ref="timeHandler">//切入的服务
<aop:pointcut id="addAllMethod"
expression="execution(*com.xrq.aop.HelloWorld.*(..))" />//处理的方法
<aop:before method="printTime" pointcut-ref="addAllMethod" />//这个点的位置,在哪个方法的先后
<aop:after method="printTime" pointcut-ref="addAllMethod" />
</aop:aspect>
</aop:config> |
来进行手动的配置:
将服务的启动书写成 timeHandler类,将需要代理维护的切入点给对应维护到进来,以后再执行到被代理的点则会根据维护的的先后对应执行.
而在spring+springmvc中,为了迎合生产的效率,大部分使用动态代理<aop:aspectj-autoproxy/>;并维护相关的参数,通过对需要切入服务维护成@aspect组件;
而在很多的项目中切入服务主要用于日志服务,对于此类的操作,日志已经有很多现场的框架因此,我们使用jar包导入,并配置好相关log.proprties文件,可以直接调用!在需要用到的页面使用:
public static Logger logger= LoggerFactory.getLogger(TokenCache.class);调用即可
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<property name="LOG_HOME" value="${CATALINA_HOME}/logs"></property><!--设置线上的地址-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"><!--打印到Tomcat的日志-->
<encoding>UTF-8</encoding>
<encoder>
<pattern>[%d{HH:mm:ss.SSS}][%p][%c{40}][%t] %m%n</pattern><!--打印的日志格式-->
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level><!--筛选出大于debug级别的日志 DEBUG-->
</filter>
</appender>
<appender name="mmall" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--日志滚动下载-->
<!--<File>d:/mmalllog/mmall.log</File>-->
<!--<File>/developer/apache-tomcat-7.0.73/logs/mmall.log</File>--><!--存放日志文件的路径-->
<File>${LOG_HOME}/logs/mmall.log</File><!--存放日志文件的路径-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--<fileNamePattern>/developer/apache-tomcat-7.0.73/logs/mmall.log.%d{yyyy-MM-dd}.gz</fileNamePattern>-->
<fileNamePattern>${LOG_HOME}/logs/mmall.log.%d{yyyy-MM-dd}.gz</fileNamePattern>
<append>true</append>
<maxHistory>10</maxHistory><!--存放历史(天数)-->
</rollingPolicy>
<encoder>
<pattern>[%d{HH:mm:ss.SSS}][%p][%c{40}][%t] %m%n</pattern><!--存储起来日志的格式-->
</encoder>
</appender>
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--<File>d:/mmalllog/error.log</File>-->
<File>/developer/apache-tomcat-7.0.56-windows-x64/apache-tomcat-7.0.56/logs/error.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/logs/error.log.%d{yyyy-MM-dd}.gz</fileNamePattern>
<!--<fileNamePattern>d:/mmalllog/error.log.%d{yyyy-MM-dd}.gz</fileNamePattern>-->
<append>true</append>
<maxHistory>10</maxHistory>
</rollingPolicy>
<encoder>
<pattern>[%d{HH:mm:ss.SSS}][%p][%c{40}][%t] %m%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!--筛选想要打印的日志-->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<logger name="com.mmall" additivity="false" level="INFO" >
<appender-ref ref="mmall" /><!--打印到哪里-->
<appender-ref ref="console"/><!--打印到什么地方-->
<appender-ref ref="error"/><!--打印到什么地方-->
</logger>
<!-- geelynote mybatis log 日志 -->
<logger name="com.mmall.dao" level="DEBUG"/><!--查看mybati配置Dao层的日志为了方便查看打印出来的日志如何-->
<logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" >
<appender-ref ref="console"/>
</logger>
<logger name="java.sql.Connection" level="DEBUG">
<appender-ref ref="console"/>
</logger>
<!--<logger name="java.sql.Statement" level="DEBUG">-->
<!--<appender-ref ref="console"/>-->
<!--</logger>-->
<!--<logger name="java.sql.PreparedStatement" level="DEBUG">-->
<!--<appender-ref ref="console"/>-->
<!--</logger>-->
<root level="DEBUG"><!--根节点日志水平设置以及相关打印-->
<appender-ref ref="console"/>
<appender-ref ref="error"/>
</root>
</configuration> |