`
hwpok
  • 浏览: 252037 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

从注释类型 到 @AspectJ

阅读更多
本练习有三个目标:
1.如何定义注释类型
2.如何使用注释类型
3.如何让注释影响程序运行

一.如何定义注释类型
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package org.test.spring.annotation;

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

/**
 * <p>
 * 定义一个Person类专用的注释
 * </p>
 * 元注释Retention用于指定此注释类型的注释要保留多久, 元注释Target用于指定此注释类型的注释适用的程序元素的种类,
 * 
 * 
@author Huy Vanpon
 
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Annot4Person
{
    String name() 
default "惠万鹏";
    
    
int age() default 25;
    
    String gender() 
default "";
}


二.2.如何使用注释类型
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package org.test.spring.annotation;

/**
 * <p>
 * 本类用于定义人类,包含一个自我介绍的方法
 * </p>
 * 
 * 
@author Huy Vanpon
 
*/
public class Person
{
    @Annot4Person(name 
= "何洁", gender = "", age = 16)
    
public void introductionMyself(String name, String gender, int age)
    {
        StringBuffer sb 
= new StringBuffer();
        sb.append(
"嗨,大家好,我叫");
        sb.append(name);
        sb.append(
",今年");
        sb.append(age);
        sb.append(
"岁,是一个充满阳光的");
        sb.append(gender);
        sb.append(
"孩.");
        System.out.println(sb.toString());
    }
}


三.如何让注释影响程序运行
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package org.test.spring.annotation;

import java.lang.reflect.Method;

/**
 * <p>
 * 本用利JAVA的反射机制,让注释影响程序的运行
 * </p>
 * 
 * 
@author Huy Vanpon
 
*/
public class AnnotDisturber
{
    
public void testAnnot4Person()
    {
        Class
<Person> clazz = Person.class;
        
try
        {
            
//通过方法名和入参确定方法
            Method method = clazz.getDeclaredMethod("introductionMyself",
                    String.
class, String.classint.class);
            
if (method == null)
            {
                
return;
            }
            
//从方法取得注释
            Annot4Person annotation = method.getAnnotation(Annot4Person.class);
            
if (annotation == null)
            {
                
return;
            }
            
//调用这个方法
            method.invoke(new Person(), annotation.name(), annotation.gender(),
                    annotation.age());
        }
        
catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    
    
public static void main(String[] args)
    {
        AnnotDisturber tt 
= new AnnotDisturber();
        tt.testAnnot4Person();
    }
}


分享到:
评论

相关推荐

    shiro-aspectj-1.4.0.jar中文-英文对照文档.zip

    (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以...

    sentinel-annotation-aspectj-1.8.0.jar中文-英文对照文档.zip

    (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以...

    详细整理Spring事务失效的具体场景及解决方案.docx

    如果需要注释非公共方法,可以开启 AspectJ 代理模式。 2. 注解@Transactional 所在类非 Spring 容器管理的 bean 如果使用@Service 注解注释的类没有被 Spring 容器管理,那么即使方法被@Transactional 注解修饰,...

    春天核心注释

    11. **@Aspect** 和 **@AspectJ**:这两个注解与Spring的AOP功能有关,用于定义切面和切点表达式,实现代码的解耦。 12. **@Transactional**:用于声明方法或类为事务性的,实现数据库操作的事务管理。 以上只是...

    spring-configurable-sample

    #自述文件使用 spring @Configurable 注释的“原型”bean 类型的示例(也请记住单例 bean),即使用普通的“new”运算符创建 bean,然后 spring 进一步控制初始化 bean,替换 @Value 占位符 bean 属性上的值,调用 ...

    java注解整理

    - 如果 `adviceMode` 设置为 `ASPECTJ`,则返回 `AspectJAsyncConfiguration` 类。 4. **第三类:动态注册 Bean** - 示例:`@EnableAspectJAutoProxy` - 使用 `AspectJAutoProxyRegistrar` 实现了 `...

    spingAOP注解方式

    在示例中,定义了一个名为`AspectjAop`的切面类,它包含以下几个关键注解: - `@Component`:声明该类为Spring的bean,使其能在Spring容器中被管理。 - `@Aspect`:标记该类为一个切面,包含切点和通知。 - `@...

    spring4注解

    - **AspectJ表达式过滤**: 通过AspectJ的表达式来过滤。 ##### 4.3 启用Spring MVC 注解 为了启用Spring MVC中的注解支持,可以通过以下配置来完成请求与注解POJO之间的映射: ```xml ``` #### 五、注解应用...

    spring的aop配置

    &lt;aop:aspectj-autoproxy/&gt; ``` 三、使用代理 Spring AOP通过动态代理机制实现切面功能。有两种代理类型:JDK动态代理和CGLIB代理。JDK代理适用于接口实现类,而CGLIB代理用于没有接口或不希望为每个目标类创建...

    Spring in Action(第2版)中文版

    2.4.1四种自动装配类型 2.4.2混合使用自动和手动装配 2.4.3何时采用自动装配 2.5控制bean创建 2.5.1bean范围化 2.5.2利用工厂方法来创建bean 2.5.3初始化和销毁bean 2.6小结 第3章高级bean装配 3.1声明父...

    Spring in Action(第二版 中文高清版).part2

    2.4.1 四种自动装配类型 2.4.2 混合使用自动和手动装配 2.4.3 何时采用自动装配 2.5 控制Bean创建 2.5.1 Bean范围化 2.5.2 利用工厂方法来创建Bean 2.5.3 初始化和销毁Bean 2.6 小结 第3章 高级Bean装配 ...

    Spring in Action(第二版 中文高清版).part1

    2.4.1 四种自动装配类型 2.4.2 混合使用自动和手动装配 2.4.3 何时采用自动装配 2.5 控制Bean创建 2.5.1 Bean范围化 2.5.2 利用工厂方法来创建Bean 2.5.3 初始化和销毁Bean 2.6 小结 第3章 高级Bean装配 ...

    《MyEclipse 6 Java 开发中文教程》前10章

    3.2.12注释和取消注释 61 3.2.13手工和自动编译 61 3.2.14直接粘贴Java源码为类文件 61 3.2.15复制项目中的文件 61 3.2.16断点和调试器 62 3.2.17快速加入、删除jar包到Build Path 63 3.2.18查看当前类被哪些类引用 ...

    J2EE应用开发详解

    172 10.5 小结 177 第11章 EJB 179 11.1 EJB简介 179 11.1.1 EJB的特点 179 11.1.2 EJB类型与组成 180 11.1.3 EJB 3.0的新特性 181 11.2 元数据注释和部署描述符 181 11.2.1 元数据注释 181 11.2.2 部署描述符 182 ...

    RestTemplate请求失败自动重试机制.docx

    在`@Retryable`注解中,我们指定了异常类型(这里为`RestClientException`的子类`HttpClientErrorException`),最大重试次数(默认3次),以及重试等待策略。`@Backoff`注解用于设置重试间隔,这里的参数说明如下:...

    spring security 参考手册中文版

    4.样品和指南(从这里开始) 28 5. Java配置 29 5.1 Hello Web安全Java配置 29 5.1.1 AbstractSecurityWebApplicationInitializer 31 5.1.2 AbstractSecurityWebApplicationInitializer不存在Spring 31 5.1.3使用...

    spring-5.2.8.RELEASE-docs.zip

    "javadoc-api"目录下的文件提供了Spring框架API的Javadoc,这是一个详细的文档集合,涵盖了所有Spring 5.2.8.RELEASE的公开接口、类和方法的注释。通过这些文档,开发者可以理解每个类的功能,学习如何使用它们来...

    spring_FrameWork3.0

    - **ResourceLoader:** ResourceLoader 接口提供了获取 Resource 的方法,可以方便地获取到应用程序中的资源。 - **ResourceLoaderAware 接口:** 允许 Bean 获得 ResourceLoader,以便在 Bean 中直接使用 ...

Global site tag (gtag.js) - Google Analytics