GithubHelp home page GithubHelp logo

annotationresolver.java's Introduction

AnnotationResolver

一个解析注解的工具类,能够把注解方法上的参数直接绑定到注解类中

具体用法举个demo

我们有这样子的需求,需要记录用户操作某个方法的信息并记录到日志里面,例如,用户在保存和更新任务的时候,我们需要记录下用户的ip,具体是保存还是更新,调用的是哪个方法,保存和更新的任务名称以及操作是否成功。

这里最好的技术就是spring aop + annotation,首先我来定义个注解类

/**
 * 参数命名好麻烦,我就随便了,只是演示下用法
 * @author liuxg
 * @date 2016年4月13日 上午7:53:52
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Logger {
	String param1() default "";
	String param2() default "" ;
	String param3() default "" ;
	String param4() default "" ;	
}

``


然后我们在controller中定义一个方法,即用户具体调用的保存或者更新的方法

@RequestMapping("/mvc24")
@Logger(param1 = "#{task.project.projectName}",param2 = "#{task.taskName}",param3 = "#{name}",param4 = "常量")
public void mvc24(Task task ,String name){
	
	//...
}

在这里我们就可以把参数中的task或者name的相关信息绑定到注解类中 然后我们再定义一个切面,我们就可以动态的获取和处理注解类的一些信息了

/**
 * 日志切面
 * @author liuxg
 * @date 2015年10月13日 下午5:55:44
 */
@Component
@Aspect
public class LoggerAspect {

	
	@Around("@annotation(com.liuxg.logger.annotation.Logger)")
	public Object around(JoinPoint joinPoint)  {

		MethodSignature methodSignature = (MethodSignature)joinPoint.getSignature();
		Method method = methodSignature.getMethod();
		Logger logger =  (Logger) method.getAnnotation(Logger.class);
		
		Object value1 = AnnotationResolver.newInstance().resolver(joinPoint, logger.param1()); //利用AnnotationResolver进行解析
		Object value2 = AnnotationResolver.newInstance().resolver(joinPoint, logger.param1());
		Object value3 = AnnotationResolver.newInstance().resolver(joinPoint, logger.param1());
		Object value4 = AnnotationResolver.newInstance().resolver(joinPoint, logger.param1());
		
		return null ;

	}
	
}

AnnotationResolver的具体用法如上,利用该解析器,可以把注解类中这样子的语法直接解析#{方法变量名} 该解析器只有唯一的一个方法

/**
 * 解析注解上的值
 * @param joinPoint 切面类,直接在aop里面获取,参考上面的例子
 * @param str 需要解析的字符串
 * @return
 */
public Object resolver(JoinPoint joinPoint, String str) 

annotationresolver.java's People

Contributors

liuxg2013 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.