Spring中自定义注解与使用

标签: java注解 springAOP Aspect
3人阅读 评论(0) 收藏 举报
分类:

以日志打印为例:

一、注解接口

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Description: 日志注解
 * @author pibigstar
 */
@Target(ElementType.METHOD)  
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LoggerManage {

	public String description();
}

二、解析注解

package com.favorites.comm.aop;


import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Service;

/**
 * @Description: 日志管理
 * @author pibigstar
 */
@Aspect
@Service
public class LoggerAdvice {
	
	private Logger logger = Logger.getLogger(this.getClass());

	@Before("within(com.favorites..*) && @annotation(loggerManage)")
	public void addBeforeLogger(JoinPoint joinPoint, LoggerManage loggerManage) {
		logger.info("执行 " + loggerManage.description() + " 开始");
		logger.info(joinPoint.getSignature().toString());
		logger.info(parseParames(joinPoint.getArgs()));
	}
	
	@AfterReturning("within(com.favorites..*) && @annotation(loggerManage)")
	public void addAfterReturningLogger(JoinPoint joinPoint, LoggerManage loggerManage) {
		logger.info("执行 " + loggerManage.description() + " 结束");
	}
	
	@AfterThrowing(pointcut = "within(com.favorites..*) && @annotation(loggerManage)", throwing = "ex")
	public void addAfterThrowingLogger(JoinPoint joinPoint, LoggerManage loggerManage, Exception ex) {
		logger.error("执行 " + loggerManage.description() + " 异常", ex);
	}

	private String parseParames(Object[] parames) {
		if (null == parames || parames.length <= 0) {
			return "";
		}
		StringBuffer param = new StringBuffer("传入参数[{}] ");
		for (Object obj : parames) {
			param.append(ToStringBuilder.reflectionToString(obj)).append("  ");
		}
		return param.toString();
	}
	
}

@Aspect相当于拦截器,使其面向切面

三、使用

@RequestMapping(value = "/login", method = RequestMethod.POST)
@LoggerManage(description="登陆")
public ResponseData login(User user,HttpServletResponse response) {
}

查看评论

自定义注解在Spring中的应用

Java注解作为程序元素(类、成员变量、成员方法等)的一种元数据信息,对程序本身的执行不会产生影响。通过自定义注解,可以给程序元素添加特殊的声明。 Spring作为构建企业级应用的平台,提供了丰...
  • liuxigiant
  • liuxigiant
  • 2017-01-09 23:27:39
  • 2031

Spring自定义注解的使用

http://blog.csdn.net/jackyechina/article/details/52980903 http://blog.csdn.net/purisuit_knowledge...
  • purisuit_knowledge
  • purisuit_knowledge
  • 2017-03-13 15:09:32
  • 1984

Spring 自定义注解的解析

  • 2015年05月12日 16:07
  • 5KB
  • 下载

使用Spring处理自定义注解

spring schema spring aop aspect 参考1dubbo service 包名:com.alibaba.dubbo.config参考2spring mvc 包名:org.spr...
  • zhanlanmg
  • zhanlanmg
  • 2015-07-08 17:58:09
  • 5764

Spring自定义注解加载和使用

原文地址:http://www.cnblogs.com/wcongcode/p/5482239.html 深入Spring:自定义注解加载和使用 前言 在工作中经常使用Spring的相关框架...
  • tanga842428
  • tanga842428
  • 2016-10-14 05:43:26
  • 706

Spring Boot 自定义注解

前情回顾: Spring MVC AOP通过注解方式拦截Controller等实现日志管理1、添加spring boot引用 org.springframework.boo...
  • xunzaosiyecao
  • xunzaosiyecao
  • 2017-08-03 08:18:36
  • 2022

springAOP进行自定义注解,用于方法的处理

本文采用的spring boot进行配置 maven 引入                             org.springframework.boot               spr...
  • u011191463
  • u011191463
  • 2017-08-31 15:50:50
  • 979

Spring Boot项目中自定义注解的使用

Spring Boot项目中自定义注解的使用 项目中常常要打印日志,尤其是在做接口开发中,因为要面临着对前台数据的检查,在这种情况下,如果还是只使用普通的日志方式,如果配置为INFO 那么明显打印...
  • Message_lx
  • Message_lx
  • 2017-02-23 16:55:38
  • 1796

在spring 中使用自定义注解

在spring中使用自定义注解
  • ai_xiangjuan
  • ai_xiangjuan
  • 2017-10-24 23:08:49
  • 26

SpringBoot学习5之自定义注解

SpringBoot学习5之自定义注解 在springboot中经常用到一些注解,包括我们在前文中已经遇到的@Controller, @RestController, @RequestMapping等...
  • ln152315
  • ln152315
  • 2017-11-22 21:15:57
  • 3639
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 1126
    排名: 4万+
    最新评论