标签归档:Spring

AOP笔记

AOP使用场景:
AOP专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,在Java EE应用中,常常通过AOP来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP 已经成为一种非常常用的解决方案。
AspectJ通常被称为编译时增强的 AOP 框架,编译时增强的 AOP 框架在性能上更有优势——因为运行时动态增强的AOP框架需要每次运行时都进行动态增强。
使用 Spring AOP与AspectJ相同的是,Spring AOP同样需要对目标类进行增强,也就是生成新的AOP代理类;与AspectJ不同的是,Spring AOP无需使用任何特殊命令对Java源代码进行编译,它采用运行时动态地、在内存中临时生成“代理类”的方式来生成AOP代理。
Spring允许使用AspectJ Annotation用于定义方面(Aspect)、切入点(Pointcut)和增强处理(Advice),Spring 框架则可识别并根据这些Annotation来生成AOP代理。Spring只是使用了和AspectJ 5一样的注解,但并没有使用AspectJ的编译器或者织入器(Weaver),底层依然使用的是Spring AOP,依然是在运行时动态生成AOP代理,并不依赖于AspectJ 的编译器或者织入器。
简单地说,Spring依然采用运行时生成动态代理的方式来增强目标对象,所以它不需要增加额外的编译,也不需要AspectJ的织入器支持;而AspectJ在采用编译时增强,所以AspectJ需要使用自己的编译器来编译Java文件,还需要织入器。

Spring AOP框架对 AOP 代理类的处理原则是:
如果目标对象的实现类实现了接口,Spring AOP将会采用JDK动态代理来生成AOP代理类;如果目标对象的实现类没有实现接口,Spring AOP将会采用CGLIB来生成AOP代理类——不过这个选择过程对开发者完全透明、开发者也无需关心。
Spring AOP会动态选择使用JDK动态代理、CGLIB来生成AOP代理,如果目标类实现了接口,Spring AOP则无需CGLIB的支持,直接使用JDK提供的Proxy和InvocationHandler来生成 AOP 代理即可。

AOP广泛应用于处理一些具有横切性质的系统级服务。AOP的出现是对OOP的良好补充,它使得开发者能用更优雅的方式处理具有横切性质的服务。不管是那种AOP实现,不论是AspectJ、还是Spring AOP,它们都需要动态地生成一个AOP代理类,区别只是生成AOP代理类的时机不同:AspectJ采用编译时生成AOP代理类,因此具有更好的性能,但需要使用特定的编译器进行处理;而Spring AOP则采用运行时生成AOP代理类,因此无需使用特定编译器进行处理。由于Spring AOP需要在每次运行时生成AOP代理,因此性能略差一些。

ibatis 打印sql出来 log4j.xml与log4j.properties两种方式

第一种  log4j.xml  也是与spring集成常用的方式

[xml]<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/ ">

<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %p – %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>

<appender name="Access" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:/access.log" />
<param name="Append" value="false" />
<param name="MaxFileSize" value="1024" />
<param name="MaxBackupIndex" value="2" />
<param name="Threshold" value="INFO" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %p – %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="WARN" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>

<appender name="Error" class="org.apache.log4j.RollingFileAppender">
<param name="Append" value="false" />
<param name="File" value="C:/error.log" />
<param name="MaxFileSize" value="1024" />
<param name="MaxBackupIndex" value="2" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %p – %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>

<root>
<appender-ref ref="STDOUT" />
<appender-ref ref="Access" />
<appender-ref ref="Error" />
</root>

<appender name="IBatis" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-4r [%t] %-5p %c %x – %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>

<logger name="com.ibatis" additivity="true">
<level value="DEBUG" />
</logger>

<logger name="java.sql.Connection" additivity="true">
<level value="DEBUG" />
</logger>

<logger name="java.sql.Statement" additivity="true">
<level value="DEBUG" />
</logger>

<logger name="java.sql.PreparedStatement" additivity="true">
<level value="DEBUG" />
<appender-ref ref="IBatis" />
</logger>

</log4j:configuration>[/xml]

第二种是log4j.properties

[xml]
#
log4j.rootLogger=DEBUG, stdout, fileout
#log4j.logger.test=info
#log4j.logger.org.apache.jasper = DEBUG
#log4j.logger.org.apache.catalina.startup.TldConfig = DEBUG
#log4j.logger.org.apache.catalina.session.ManagerBase = DEBUG

log4j.logger.com.fiscal = DEBUG
log4j.logger.com.system = DEBUG

log4j.logger.com.ibatis = DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG
log4j.logger.java.sql.Connection = DEBUG
#log4j.logger.java.sql.Statement = DEBUG
#log4j.logger.java.sql.PreparedStatement = DEBUG
log4j.logger.java.sql.ResultSet = DEBUG

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.fileout=org.apache.log4j.RollingFileAppender
log4j.appender.fileout.File=C:\\ibatis.log
log4j.appender.fileout.MaxFileSize=10000KB

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} :%m%n
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH:mm:ss} :%m%n

#log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

# log4j.logger.org=info
#——————————–

[/xml]

 

两种方式都来源于网络

xml:

http://wuguowei1314.iteye.com/blog/1435164

log4j.properties:

http://www.iteye.com/topic/309147