- 浏览: 3445950 次
- 性别:
- 来自: 珠海
-
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
java自定义注解 http://my.oschina.net/OkSerIous/blog/402718
深入理解Java:注解(Annotation)自定义注解入门 http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html
http://chenjumin.iteye.com/blog/454459
Pattern属性符: (.) 符合任何单一字符 (+)符合前一个字符一次或多次 (*)符合前一个字符零次或多次.
本自定义注解的作用:用于控制类方法的调用,只有拥有某个角色时才能调用。
java内置注解
1、@Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
ElemenetType.CONSTRUCTOR 构造器声明
ElemenetType.FIELD 域声明(包括 enum 实例)
ElemenetType.LOCAL_VARIABLE 局部变量声明
ElemenetType.METHOD 方法声明
ElemenetType.PACKAGE 包声明
ElemenetType.PARAMETER 参数声明
ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
2、@Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
RetentionPolicy.SOURCE 注解将被编译器丢弃
RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
Spring自定义注解
一、注解类源码
二、Person类的源码。该类使用了自定义注解。
三、通过环绕通知对方法进行拦截,只有当角色匹配时,才能执行方法。
四、Spring配置
注意:
1.监视annotationTest和save开头的方法。
2.监视所有com开头的方法,包括com.XXX.XXX......()方法。
Pattern属性符:
(.) 符合任何单一字符 (+)符合前一个字符一次或多次 (*)符合前一个字符零次或多次
spring 拦截器 spring自定义注解,访问HttpServletRequest等方式 http://blog.csdn.net/zhuyangxing/article/details/18796091
最近项目里加上了用户权限,有些操作需要登录,有些操作不需要,之前做项目做权限,喜欢使用过滤器,但在此使用过滤器比较死板,如果用的话,就必须在配置文件里加上所有方法,而且 不好使用通配符。所以想了想,之前在人人用过的一种比较简单灵活的权限判断,是采用Spring 的 methhodInterceptor拦截器完成的,并且是基于注解的。
现在自己写了一套。大概是用法是这样的:
我是在Spring mvc 的controller层的方法上拦截的,注意上面的@LoginRequired 是我自定义的注解。这样的话,该方法被拦截后,如果有该 注解,则表明该 方法需要用户登录后才能执行某种操作,于是乎,我们可以判断request里的session或者Cookie是否包含用户已经登录的身份,然后判断是否执行该方法;如果没有,则执行另一种操作。
-------------------------------------------------------------------------
下面是自定义注解的代码:
-----------------------------------------------------------------------------
下面是自定义的方法拦截器,继续自aop的MethodInterceptor
------------------------------------------------------------------------
配置文件:
深入理解Java:注解(Annotation)自定义注解入门 http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html
http://chenjumin.iteye.com/blog/454459
Pattern属性符: (.) 符合任何单一字符 (+)符合前一个字符一次或多次 (*)符合前一个字符零次或多次.
本自定义注解的作用:用于控制类方法的调用,只有拥有某个角色时才能调用。
java内置注解
1、@Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
ElemenetType.CONSTRUCTOR 构造器声明
ElemenetType.FIELD 域声明(包括 enum 实例)
ElemenetType.LOCAL_VARIABLE 局部变量声明
ElemenetType.METHOD 方法声明
ElemenetType.PACKAGE 包声明
ElemenetType.PARAMETER 参数声明
ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
2、@Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
RetentionPolicy.SOURCE 注解将被编译器丢弃
RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
Spring自定义注解
一、注解类源码
/** * 方法访问角色注解 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface VisitorRole { String value(); }
二、Person类的源码。该类使用了自定义注解。
@Component("person") //此处通过注解的方式定义受管Bean public class Person { private String userId = "cjm"; private String userName = "jumin.chen"; @VisitorRole("ADMIN") //自定义注解的使用。只有具有ADMIN角色才能调用本方法。 public String say(){ return "I'm " + userName; } }
三、通过环绕通知对方法进行拦截,只有当角色匹配时,才能执行方法。
/** * 环绕通知:在类方法调用前,先判断角色是否匹配。 */ @Component("visitorRoleAdvice") public class VisitorRoleAdvice implements MethodInterceptor { public Object invoke(MethodInvocation invocation) throws Throwable { if(invocation.getMethod().isAnnotationPresent(VisitorRole.class)){ //有指定注解 String role = null; Annotation annotation = invocation.getMethod().getAnnotation(VisitorRole.class); //获取指定注解 if(annotation!=null){ role = ((VisitorRole)annotation).value(); //从注解中获取角色 } if("ADMIN".equals(role)){ return invocation.proceed(); //角色匹配,继续执行方法 }else{ System.out.println("没有角色权限!"); return null; } }else{ //类方法没有自定义注解,直接执行该方法 return invocation.proceed(); } } }
四、Spring配置
<!-- 声明通过注解定义bean,同时也通过注解自动注入 --> <context:component-scan base-package="com.cjm" annotation-config="true"/> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/> <bean id="nameMatchMethodPointcutAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> <property name="advice" ref="visitorRoleAdvice"/> <property name="mappedNames"> <list> <value>say</value> </list> </property> </bean>
注意:
1.监视annotationTest和save开头的方法。
<bean id="nameMatchMethodPointcutAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> <property name="advice" ref="myAnnotationAdvice"/> <property name="mappedNames"> <list> <value>annotationTest*</value> <value>save*</value> </list> </property> </bean>
2.监视所有com开头的方法,包括com.XXX.XXX......()方法。
Pattern属性符:
(.) 符合任何单一字符 (+)符合前一个字符一次或多次 (*)符合前一个字符零次或多次
<bean id="regexpMethodPointcutAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="advice" ref="myAnnotationAdvice"/> <property name="patterns" value="com.+"> </property> </bean>
spring 拦截器 spring自定义注解,访问HttpServletRequest等方式 http://blog.csdn.net/zhuyangxing/article/details/18796091
最近项目里加上了用户权限,有些操作需要登录,有些操作不需要,之前做项目做权限,喜欢使用过滤器,但在此使用过滤器比较死板,如果用的话,就必须在配置文件里加上所有方法,而且 不好使用通配符。所以想了想,之前在人人用过的一种比较简单灵活的权限判断,是采用Spring 的 methhodInterceptor拦截器完成的,并且是基于注解的。
现在自己写了一套。大概是用法是这样的:
@LoginRequired @RequestMapping(value = "/comment") public void comment(HttpServletRequest req, HttpServletResponse res) { // doSomething,,,,,,,, }
我是在Spring mvc 的controller层的方法上拦截的,注意上面的@LoginRequired 是我自定义的注解。这样的话,该方法被拦截后,如果有该 注解,则表明该 方法需要用户登录后才能执行某种操作,于是乎,我们可以判断request里的session或者Cookie是否包含用户已经登录的身份,然后判断是否执行该方法;如果没有,则执行另一种操作。
-------------------------------------------------------------------------
下面是自定义注解的代码:
package com.qunar.wireless.ugc.controllor.web; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface LoginRequired { }
-----------------------------------------------------------------------------
下面是自定义的方法拦截器,继续自aop的MethodInterceptor
import javax.servlet.http.HttpServletRequest; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import com.qunar.wireless.ugc.controllor.web.LoginRequired; /** * @author tao.zhang * @create-time 2012-2-31 */ public class LoginRequiredInterceptor1 implements MethodInterceptor { @Override public Object invoke(MethodInvocation mi) throws Throwable { Object[] ars = mi.getArguments(); for(Object o :ars){ if(o instanceof HttpServletRequest){ System.out.println("------------this is a HttpServletRequest Parameter------------ "); } } // 判断该方法是否加了@LoginRequired 注解 if(mi.getMethod().isAnnotationPresent(LoginRequired.class)){ System.out.println("----------this method is added @LoginRequired-------------------------"); } //执行被拦截的方法,切记,如果此方法不调用,则被拦截的方法不会被执行。 return mi.proceed(); } }
------------------------------------------------------------------------
配置文件:
<bean id="springMethodInterceptor" class="com.qunar.wireless.ugc.interceptor.LoginRequiredInterceptor1" ></bean> <aop:config> <!--切入点--> <aop:pointcut id="loginPoint" expression="execution(public * com.qunar.wireless.ugc.controllor.web.*.*(..)) "/> <!--在该切入点使用自定义拦截器--> <aop:advisor pointcut-ref="loginPoint" advice-ref="springMethodInterceptor"/> </aop:config>
发表评论
-
Java Comparable和Comparator
2016-06-26 08:52 720http://my.oschina.net/android52 ... -
Spring Boot 属性配置
2016-06-24 11:04 1200Spring Boot 属性配置和使用 http://blog ... -
Spring Boot 集成MyBatis
2016-06-24 10:55 2051Spring Boot 集成MyBatis http://bl ... -
Java集合框架之fastutil & koloboke
2016-06-23 14:04 2490Java集合框架之fastutil http://rensan ... -
Spring MVC防重复提交
2016-06-17 15:47 1664http://my.oschina.net/zyqjustin ... -
Spring容器加载完之后执行特定任务
2016-06-17 15:36 2309http://my.oschina.net/simpleton ... -
使用spring-session和shiro来代理session的配置
2016-06-16 11:21 12082使用spring-session和redis来代理sessio ... -
JSTL 的 if else : 有 c:if 没有 else 的处理
2016-06-14 09:52 1350http://blog.csdn.net/xiyuan1999 ... -
spring mvc 请求转发和重定向
2016-06-14 09:48 1423http://blog.csdn.net/jackpk/art ... -
ehcache 分布式支持
2016-06-05 22:26 1118原文 http://my.oschina.net/glenxu ... -
Intellij IDEA插件开发入门
2016-05-26 11:42 2907原文: http://blog.csdn.net/dc_726 ... -
阿里巴巴Druid数据源的配置与使用
2016-05-24 17:42 1563http://my.oschina.net/wjme/blog ... -
mvc:view-controller
2016-05-18 10:26 1101http://blog.csdn.net/lzwglory/a ... -
spring配置事物的方式:注解和aop配置
2016-05-14 00:26 4122参考: Spring AOP中pointcut express ... -
分布式任务调度组件 Uncode-Schedule
2016-05-13 14:47 2305http://www.oschina.net/p/uncode ... -
Mybatis分库分表扩展插件
2016-05-12 15:47 1641http://fangjialong.iteye.com/bl ... -
spring+mybatis+atomikos 实现JTA事务
2016-05-11 22:00 5546sping配置多个数据源 不同用户操作不同数据库 http:/ ... -
Spring中使用注解 @Scheduled执行定时任务
2016-05-10 09:39 1584原文:http://dwf07223.blog.51cto.c ... -
mysql中间件研究(Atlas,cobar,TDDL), 分库分表插件
2016-05-09 14:15 3481http://www.guokr.com/blog/47576 ... -
Java集合: Queue和Deque
2016-05-09 09:49 1881Queue http://my.oschina.net/kev ...
相关推荐
总结来说,Spring自定义注解和AOP的结合使用,让我们能够灵活地在代码中插入跨切面的关注点,如日志记录、事务管理、性能监控等,而不必在每个方法中手动添加这些代码。这不仅提高了代码的整洁度,也使得系统更加...
总的来说,Spring自定义注解的解析是一个强大且灵活的工具,可以帮助我们实现更精细化的代码组织和控制。结合`@ComponentScan`,我们可以轻松地在Spring环境中管理和利用自定义注解,进一步提升代码的可读性和可维护...
Spring 自定义注解和 Aspect 的使用 在本文中,我们将学习如何在 Spring 项目中使用自定义注解和 Aspect 来实现日志记录功能。我们将从头开始,创建一个简单的 Spring Boot 项目,然后使用自定义注解和 Aspect 来...
Spring 自定义注解注入properties文件的值jar包,下面为使用方法 在xml配置文件中,这样加载properties文件 ...
浅谈Spring自定义注解从入门到精通 在业务开发过程中,我们经常会遇到形形色色的注解,但是框架自有的注解并不是总能满足复杂的业务需求。这时,我们可以自定义注解来满足我们的需求。根据注解使用的位置,文章将...
3、对spring aop认识模糊的,不清楚如何实现Java 自定义注解的 4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑...
本篇将深入探讨如何自定义注解并模拟Spring通过注解方式创建bean实例。 首先,了解注解(Annotation)在Java中的角色。注解是一种元数据,它提供了在源代码中添加信息的方式,这些信息可以被编译器或运行时环境读取...
使用Spring AOP和自定义注解进行参数检查 了解使用Spring AOP和自定义注解进行参数检查的技术细节。通过自定义注解和spring AOP,我们可以实现参数的校验,提高代码的可读性和可维护性。 自定义注解 在本篇文章中...
使用SpringBoot通过自定义注解+AOP+全局异常处理实现参数统一非空校验
在Spring框架中,自定义注解(Annotation)和AOP(面向切面编程)的结合使用,极大地增强了代码的可读性和可维护性。本文将深入探讨如何在Spring中创建自定义注解以及如何在AOP中有效地获取并利用这些注解。 首先,...
在Spring框架中,自定义注解结合AOP(面向切面编程)是实现业务逻辑与非业务逻辑分离的一种有效方式。通过自定义注解,可以针对不同的业务场景灵活地添加功能,比如权限控制、日志记录、事务管理等。本文将详细讨论...
这个机制在实际开发中有着广泛的应用,比如在微服务框架如Dubbo中,通过自定义注解可以方便地将服务提供者和服务消费者自动注册到Spring容器,简化配置,提高代码可读性和可维护性。通过理解和掌握这一机制,开发者...
### Spring Java注解、元注解与自定义注解详解 #### 一、Java注解简介 在深入了解Spring框架中的注解应用之前,我们首先需要对Java注解有一个基本的认识。Java注解(Annotation)是一种元数据,可以为程序代码添加...
Java自定义注解和Spring的BeanPostProcessor是Java企业级开发中的两个重要概念,它们在构建灵活、可扩展的应用程序中发挥着关键作用。本文将深入探讨这两个话题,并结合源码分析,帮助开发者更好地理解和应用。 ...
Java 自定义注解验证是Java开发中的一个重要特性,它允许开发者创建自己的元数据,以便在编译时或运行时对代码进行验证和处理。自定义注解为代码提供了额外的信息,使得程序更具可读性、可维护性和灵活性。在本案例...
在这个特定的场景中,我们探讨的是如何在Spring Boot应用中自定义注解,以及如何利用这个注解进行系统监控的开发。 首先,让我们理解什么是自定义注解。在Java中,注解(Annotation)是一种元数据,它提供了向...
本教程将探讨如何使用Java自定义注解来模拟实现这些SpringBoot相关的注解功能。 首先,我们来看`@Autowired`注解。`@Autowired`是Spring框架中的一个关键注解,用于自动装配bean。当我们想在类中注入某个依赖时,而...
自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回...
在这个“自定义注解实现伪动态传参的小demo”中,我们将探讨如何创建一个自定义注解,以允许在注解中传递类似于动态参数的数据。 首先,自定义注解的定义通常以`@interface`关键字开始,我们可以定义一些元素(也...
在服务端开发中,如Spring框架,自定义注解可以用于简化配置,增强功能。例如,可以创建一个用于事务管理的注解: ```java @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @...