java 注解示例(springboot自定义注解为对象赋值)


java 注解示例

 

 

*********************

示例:自定义注解为对象赋值

 

***************

annotation 层

 

CustomAnnotation

@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {

    String value() default "";
}

 

***************

pojo 层

 

Person

@Component
public class Person {

    private String name;
    private Integer age;

    @CustomAnnotation("瓜田李下")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @CustomAnnotation("24")
    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return this.name+"  "+this.age;
    }
}

 

***************

aop 层

 

CustomAspect

@Aspect
@Component
public class CustomAspect {

    @Pointcut("@annotation(com.example.demo.annotation.CustomAnnotation)")
    public void fun(){

    }

    @Before("fun()")
    public void before(JoinPoint joinPoint){
        Person person=(Person) joinPoint.getTarget();

        MethodSignature methodSignature=(MethodSignature) joinPoint.getSignature();
        Method method=methodSignature.getMethod();
        CustomAnnotation customAnnotation=method.getAnnotation(CustomAnnotation.class);
        if (method.getName().equals("getName")){
            if (person.getName()==null){
                person.setName(customAnnotation.value());
            }
        }else {
            if (person.getAge()==null){
                person.setAge(Integer.parseInt(customAnnotation.value().toString()));
            }
        }
    }
}

 

***************

controller 层

 

HelloController

@RestController
public class HelloController {

    @Autowired
    private Person person;

    @RequestMapping("/hello")
    public void hello(){

        System.out.println(person.getName()+"  "+person.getAge());
    }
}

 

 

*********************

控制台输出

 

2019-11-16 10:26:16.116  INFO 23704 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-11-16 10:26:16.116  INFO 23704 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2019-11-16 10:26:16.124  INFO 23704 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 8 ms
瓜田李下  24

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java自定义注解是一种元数据(metadata)的形式,它允许我们在代码添加自定义的标记和信息。通过定义注解,我们可以为类、方法、字段等元素添加额外的信息,这些信息可以在编译时被读取,并用于生成代码、进行静态检查、运行时处理等。 自定义注解的定义使用`@interface`关键字,类似于定义一个接口或类。注解可以包含成员变量、方法、默认值等。成员变量可以是基本类型、字符串、枚举类型、注解类型或这些类型的数组。注解的方法可以没有参数或带有参数,可以有返回值或没有返回值。 以下是一个简单的示例,展示了如何定义一个自定义注解: ```java import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { String value() default ""; int number() default 0; } ``` 在上面的示例,我们定义了一个名为`MyAnnotation`的自定义注解。它具有一个名为`value`的成员变量,默认值为空字符串,以及一个名为`number`的成员变量,默认值为0。注解使用了`@Retention`和`@Target`注解来指定注解的保留策略和作用目标。 使用自定义注解时,我们可以在需要标记的元素上使用注解,并为其成员变量赋值。例如: ```java public class MyClass { @MyAnnotation(value = "Hello", number = 42) public void myMethod() { // ... } } ``` 在上面的示例,我们将自定义注解`MyAnnotation`应用到`myMethod`方法上,并为其成员变量`value`和`number`赋值。 在实际应用,我们可以利用反射机制获取注解信息,并根据注解的信息执行相应的逻辑。自定义注解在框架和库的开发经常被使用,例如Spring框架的`@Autowired`和JUnit测试框架的`@Test`等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值