`

spring自定义注解+扫描

 
阅读更多

事务注解是怎么发挥作用的。

1、首先自定义一个注解类,public @interface MyComponent。

2、TxAdviceBeanDefinitionParser

3、实现MethodInterceptor接口,进行方法拦截。比如TransactionInterceptor。

 

 

常见的aop拦截的例子:

1、定义自定义注解。

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.TYPE })
public @interface CallTimesLimit {

	// 唯一标识名
    public String key();
    // 限制次数,以秒为单位
    public int limit() default  5;
}

 

2、拦截处理器。

@Aspect
@Component
public class CallTimesLimitImp {
	private Logger logger = LoggerFactory.getLogger(CallTimesLimitImp.class);

	@Around(value = "@annotation(com.liu.aop.CallTimesLimit)")
	public Object validateCallTimes(ProceedingJoinPoint joinPoint) throws Throwable {
		String key = "";
		int limitNum = 0;
		try {
			long start = System.currentTimeMillis();
			// 获取用户cookie
			HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
			// 拦截的实体类
			Object target = joinPoint.getTarget();
			// 拦截的方法名称
			String methodName = joinPoint.getSignature().getName();
			// 拦截的方法参数
			Object[] argsa = joinPoint.getArgs();
			// 拦截的放参数类型
			Class[] parameterTypes = ((MethodSignature) joinPoint.getSignature()).getMethod().getParameterTypes();
			Method method = target.getClass().getMethod(methodName, parameterTypes);
			CallTimesLimit limitItem = method.getAnnotation(CallTimesLimit.class);
			key = limitItem.key();
			limitNum = limitItem.limit();
			if (!StringUtils.isEmpty(key)) {
				logger.info("CallTimesLimitImp key={}`limitNum={}", key, limitNum);
				// TODO 这里可以做一堆事情。。。
			}
			logger.info("CallTimesLimitImp key={}`limitNum={}`spendtimes={}", key, limitNum, (System.currentTimeMillis() - start) / 1000);
			return joinPoint.proceed();
		} catch (Exception e) {
			logger.error("CallTimesLimitImp key={}`limitNum={}", key, limitNum);
			throw new ServiceException(10001, "调用次数达到上限");
		}
	}

}

 

分享到:
评论

相关推荐

    Spring 自定义注解的解析

    总的来说,Spring自定义注解的解析是一个强大且灵活的工具,可以帮助我们实现更精细化的代码组织和控制。结合`@ComponentScan`,我们可以轻松地在Spring环境中管理和利用自定义注解,进一步提升代码的可读性和可维护...

    java 自定义注解验证

    Java 自定义注解验证是Java开发中的一个重要特性,它允许开发者创建自己的元数据,以便在编译时或运行时对代码进行验证和处理。自定义注解为代码提供了额外的信息,使得程序更具可读性、可维护性和灵活性。在本案例...

    自定义注解得使用,模拟spring通过注解方式创建bean实例

    本篇将深入探讨如何自定义注解并模拟Spring通过注解方式创建bean实例。 首先,了解注解(Annotation)在Java中的角色。注解是一种元数据,它提供了在源代码中添加信息的方式,这些信息可以被编译器或运行时环境读取...

    Spring java注解,元注解和自定义注解

    ### Spring Java注解、元注解与自定义注解详解 #### 一、Java注解简介 在深入了解Spring框架中的注解应用之前,我们首先需要对Java注解有一个基本的认识。Java注解(Annotation)是一种元数据,可以为程序代码添加...

    java(spring boot)自定义注解

    总结来说,这个示例展示了如何在Spring Boot项目中自定义注解,将其应用于Java Bean的方法,以及如何利用AOP来实现全局扫描和自动执行。这样的实践在系统监控、性能分析和故障排查中非常有用,能够帮助开发者更好地...

    自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏

    自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回...

    Spring注解和扫包自定义注解和自动扫包.rar

    Spring还提供了AOP(面向切面编程)的支持,使得可以通过`@Aspect`、`@Pointcut`、`@Before`、`@After`等注解来关联自定义注解和切面处理逻辑,实现类似注解触发的方法拦截。 关于Mybatis,虽然它主要关注SQL映射和...

    使用Java自定义注解模拟实现SpringBoot相关注解.zip

    本教程将探讨如何使用Java自定义注解来模拟实现这些SpringBoot相关的注解功能。 首先,我们来看`@Autowired`注解。`@Autowired`是Spring框架中的一个关键注解,用于自动装配bean。当我们想在类中注入某个依赖时,而...

    自定义注解实现过滤实例

    在Java编程语言中,自定义注解是一种强大的工具,它允许开发者创建自己的元数据,以提供额外的信息给编译器、运行时环境或其他工具。在本案例中,我们讨论的主题是如何利用自定义注解实现过滤实例,特别是结合MySQL...

    丛林探险之Spring自定义注解加载Bean

    这个机制在实际开发中有着广泛的应用,比如在微服务框架如Dubbo中,通过自定义注解可以方便地将服务提供者和服务消费者自动注册到Spring容器,简化配置,提高代码可读性和可维护性。通过理解和掌握这一机制,开发者...

    SpringMVC利用AOP实现自定义注解记录日志

    在Spring中,定义一个自定义注解,比如`@Loggable`,用于标记需要记录日志的方法。注解的定义如下: ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Loggable { ...

    这一次搞懂Spring自定义标签以及注解解析原理说明

    总结起来,Spring的自定义标签解析是通过`NamespaceHandler`机制实现的,而注解解析则依赖于类路径扫描和`BeanDefinition`的创建。这两者都是Spring实现声明式编程和依赖注入的重要组成部分,极大地简化了Spring应用...

    Spring+MVC+3.0.5+Spring+3.0.5+MyBatis3.0.4全注解实例详解

    然后,通过`@MapperScan`注解扫描包含Mapper接口的包,使Spring能够自动创建并管理这些接口的实现。 在业务层,我们可以使用`@Service`注解标记服务类,Spring会自动进行依赖注入。在数据访问层,MyBatis的注解可以...

    spring mvc + spring + hibernate 全注解整合开发视频教程 13

    在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第13部分,将帮助开发者掌握如何在Java Web项目中高效利用这些技术,实现一个现代化、高效且可...

    Spring IOC 原理 ,Java 反射实例,自定义注解

    在Spring中,我们可以使用`@ComponentScan`或`@Configuration`配合`@Autowired`,扫描带有自定义注解的类并自动装配它们。Spring的AOP(面向切面编程)也支持自定义注解,用于实现如日志记录、事务管理等跨切面关注...

    自定义注解使用

    这是最常见的使用场景,例如Spring框架中对组件的扫描和配置。 3. **处理器(Processors)**:使用`@Processor`和`@ProcessAnnotatedTypes`注解配合Java的注解处理器API(JSR 269),可以在编译期间动态生成代码。 ...

    自定义注解MVC

    在这个主题“自定义注解MVC”中,我们将深入探讨如何在自定义框架中利用注解来实现控制翻转,增强代码的可读性和可维护性。 1. **自定义注解** - 注解是一种在代码中添加元信息的方式,它允许开发者在不改变程序...

    ssm(Spring+SpringMVC+MyBatis)整合框架

    DI使得对象之间的依赖关系可以通过配置文件或注解来管理,增强了代码的可测试性和可维护性。AOP则允许我们定义横切关注点,如日志、事务管理,这些关注点可以被模块化并独立于业务逻辑。 2. **SpringMVC**:...

    spring中注解的实现原理

    通过实现`BeanFactoryPostProcessor`或`BeanPostProcessor`接口,你可以扩展Spring的行为,使其在处理自定义注解时执行特定的操作。 总结来说,Spring中注解的实现原理涉及到元注解的定义、注解处理器的运行、Bean...

    Spring注解开发组件扫描器.zip

    在这个名为“Spring注解开发组件扫描器”的资料中,我们将深入探讨如何利用注解进行组件扫描以及自定义组件扫描过滤器。 首先,让我们理解Spring中的注解驱动开发。在Spring中,我们可以使用如@Service、@...

Global site tag (gtag.js) - Google Analytics