定义自定义注解
/**
* 参数日志
* 输出方法上的参数
* 输出返回对象
*/
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ParamLog {
}
/**
* 参数日志
* 输出方法上的参数
* 输出返回对象
*/
@Component
@Aspect
public class ParamLogUtil {
private static final Logger logger = LoggerFactory.getLogger(ParamLogUtil.class);
public ParamLogUtil() {
logger.info("加载aop模块");
}
@Pointcut("@annotation(com.xxx.util.annotationlog.ParamLog)")
public void methodCachePointcut() {
}
@Around("methodCachePointcut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
Object[] args = point.getArgs();
for (Object object : args) {
logInfo(object,0);
}
Object object;
try {
object = point.proceed();
} catch (Exception e) {
throw e;
}
logInfo(object,1);
return object;
}
public void logInfo(Object object, Integer i) {
String logType = "";
if(i == 0) {
logType = "输入参数:";
}else {
logType = "输出参数:";
}
if(object == null) {
logger.info(logType+"为null");
}else {
logger.info(logType+object.toString());
}
}
}
使用自定义注解
@Override
@ParamLog
public void createXXX(XXX xxx) {
Session session = null;
try {
session = getSession();
Transaction tran = session.beginTransaction();
session.save(xxx);
tran.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
}