`
crabdave
  • 浏览: 1298302 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring AOP自定义注解样例

 
阅读更多

Spring AOP自定义注解样例

 

参考:http://www.cnblogs.com/shipengzhi/articles/2716004.html 

 

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Ann {

    String value();

}

 

注解处理器
public class AnnoSupport {
    /**
     * 处理过程
     * @param joinPoint AOP切入点
     * @return
     * @throws Throwable
     */
    public Object doSupport(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("doSupport");
        try {
            return process(joinPoint);
        } catch (Throwable t) {
            throw t;
        }
    }

    /**
     * 处理过程
     * @param joinPoint AOP切入点
     * @return
     * @throws Throwable
     */
    private Object process(ProceedingJoinPoint joinPoint) throws Throwable {
	System.out.println("process");
        Class<?> clazz = joinPoint.getTarget().getClass();
        String className = clazz.getSimpleName();//获取类名

        Signature signature = joinPoint.getSignature();
        Method method = ((MethodSignature) signature).getMethod();
        String methodName = method.getName();//获取方法名

        Method realMethod = clazz.getMethod(methodName, method.getParameterTypes());
	if (realMethod.isAnnotationPresent(Ann.class)) {
		... ...

		Ann ann = realMethod.getAnnotation(Ann.class);//获取注解
		System.out.println("ann:" + ann.value());
        }	
        return joinPoint.proceed();//执行方法
    }
 }

 

 spring配置

    <bean id="annoSupport" class="com.test.AnnoSupport"/>

    <bean id="TestAnn" class="com.test.TestAnn">
    </bean>
    <!-   注册注解处理器 -->
    <aop:aspectj-autoproxy/>
    <aop:config>
        <aop:aspect ref="annoSupport">
            <aop:pointcut id="supportMethod"
                          expression="@annotation(com.test.Ann)"/>
            <aop:around pointcut-ref="supportMethod" method="doSupport"/>
        </aop:aspect>
    </aop:config>

 

 

测试类
public class TestAnn {

    @Ann("test")
    public String ann(String test){
        return test;
    }

    public static void main(String[] args){
    ApplicationContext ac = new FileSystemXmlApplicationContext("file:D:\\workspace\\src\\main\\java\\com\\test\\applicationContext.xml");
        TestAnn test = (TestAnn)ac.getBean("TestAnn");
	test.ann("Test ann");
    }
    
}

 

分享到:
评论

相关推荐

    spring自定义注解样例

    本示例主要探讨如何在Spring中创建和使用自定义注解,以及与AOP结合实现动态代理。 首先,我们需要了解自定义注解的基本结构。在Java中,自定义注解是以`@interface`关键字定义的。例如,我们可以创建一个名为`...

    Spring AOP 工程样例

    在`SpringAopStudy`工程样例中,你可以看到如何创建一个切面类,定义切点和通知,以及如何在配置文件或通过注解方式启用AOP。通常,你会看到一个包含`@Aspect`注解的类,里面定义了`@Pointcut`和各种`@Advice`。此外...

    Aop注解示例

    本篇将深入探讨Spring AOP中的注解使用,帮助开发者理解如何在实际项目中实现切面逻辑。 首先,我们需要了解AOP的基本概念。面向切面编程是一种编程范式,它允许程序员定义“切面”,这些切面封装了关注点,如日志...

    spring boot 全面的样例代码

    - [Spring Boot自定义Banner](http://blog.didispace.com/spring-boot-banner/) ### Dubbo进行服务治理 - chapter9-2-1:[Spring Boot中使用Dubbo进行服务治理] - chapter9-2-2:[Spring Boot与Dubbo中管理服务...

    spring切换数据源样例代码

    这里的`ReadFrom`是自定义注解,用于标记那些应该从特定数据源读取数据的方法。 最后,我们可以通过注解`@ReadFrom`或`@WriteTo`来指定方法应使用哪个数据源。例如: ```java @Service public class UserService {...

    spring mvc测试样例,使用spring4.1开发

    8. **AOP(面向切面编程)**:Spring MVC与Spring的AOP模块紧密集成,可以方便地进行横切关注点的处理,如事务管理、日志记录等。 9. **RESTful支持**:Spring 4.1进一步加强了对RESTful风格的Web服务支持,可以...

    spring的bean加载顺序样例项目

    在"spring的bean加载顺序样例项目"中,我们可以通过分析和实验来深入理解这一主题。下面将详细阐述Spring Bean的加载顺序以及相关知识点。 1. **Bean的定义与作用域** - Spring中的Bean是在`beans.xml`或Java配置...

    spring chm文档

    6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @AspectJ支持 6.2.1. 启用@AspectJ支持 6.2.2. 声明一个切面 6.2.3. 声明一个...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1....

    Spring中文帮助文档

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.6.1. 理解AOP代理 6.7. 以编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ进行domain ...

    Spring 2.0 开发参考手册

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 ...

    Spring API

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.6.1. 理解AOP代理 6.7. 以编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ进行domain ...

    spring mvc demo

    Spring MVC 的设计目的是简化开发,提高可测试性,并与其他Spring框架无缝集成,如Spring Core、Spring Beans和Spring AOP。在这个"spring mvc demo"中,我们可以期待学习到关于如何设置和运行一个基本的Spring MVC...

    Spring Security3

    - **实现机制**:通过Spring AOP拦截方法调用,检查用户是否有执行该操作的权限。 #### 第六章:高级配置和扩展 **自定义安全过滤器** - **实现**:扩展Spring Security提供的过滤器,实现特定的安全需求。 - **...

    SSH经典框架搭建样例

    同时,还需要配置Spring与Struts2的整合,例如使用Spring插件或自定义拦截器实现Action的依赖注入。 5. **配置Hibernate**:编写hibernate.cfg.xml,设定数据库连接参数。创建实体类,并使用Hibernate注解或XML映射...

    Spring SpringMVC MyBatis整合包

    Spring的主要特性包括依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问抽象等。依赖注入使得组件之间的耦合度降低,提高了代码的可测试性和可维护性。Spring还提供了大量的模块,如Spring MVC、Spring JDBC...

    Spring Boot缓存实战 Caffeine示例

    使用 @EnableCaching 注解可以让 Spring Boot 开启对缓存的支持。例如: @SpringBootApplication @EnableCaching public class SpringBootStudentCacheCaffeineApplication { public static void main(String[] ...

    validation:spring2.5 + spring-modules-validation 扩展

    Spring Modules Validation可以方便地集成到Spring的AOP(面向切面编程)体系中,利用AspectJ或Spring的@PostValidate注解,可以在业务层面上进行更复杂的逻辑判断。 **压缩包文件名称列表:validation-master** 这...

    Spring4.3+SpringMVC4.3+Mybatis3+EASYUI整合

    **Spring框架**是整个应用程序的基础,它是一个轻量级的容器,提供了依赖注入(DI)和面向切面编程(AOP)等核心特性。在4.3版本中,Spring进一步优化了对Java 8的支持,增强了对反应式编程的支持,并且提升了整体...

    hibernate3.3+spring2+struts2的整合源代码

    Spring 2在这个基础上进一步强化了AOP(面向切面编程)和Web MVC功能,同时也增强了对其他框架如Hibernate的支持。 Struts2则是一个基于MVC设计模式的Web框架,它简化了视图、控制器和模型之间的交互。Struts2与...

Global site tag (gtag.js) - Google Analytics