如何写一个类似 @Resource 的注解

无名的骑士 发布于 2016/09/12 17:04
阅读 388
收藏 2

Spring 的 @Resource 注解 用时就算不赋值

也有默认值存在

这个是怎么实现的?

package javax.annotation;

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

@Target({ java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD,
		java.lang.annotation.ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Resource {
	public abstract String name();

	public abstract String lookup();

	public abstract Class type();

	public abstract AuthenticationType authenticationType();

	public abstract boolean shareable();

	public abstract String mappedName();

	public abstract String description();

	public static enum AuthenticationType {
		CONTAINER, APPLICATION;
	}
}



上面是Spring的@Resource注解的源码

但是我按照上面的类似的写法写了一个一样名的注解

使用时却必须要赋值给注解内的属性,否则用不了

是不是Spring里还有一些为注解内属性赋值的地方???

Spring是怎样赋的值?

求助

加载中
0
逝水fox
逝水fox

不知楼主的源码怎么来的,看文档,所有属性都有默认值

https://docs.oracle.com/javaee/7/api/javax/annotation/Resource.html


逝水fox
逝水fox
回复 @无名的骑士 : Spring对Resource注解的处理逻辑,你可以看下这个类的源码:org.springframework.context.annotation.CommonAnnotationBeanPostProcessor
无名的骑士
无名的骑士
原来如此 name 默认是空的 我还以为Spring的@Resource默认值 是动态的呢 看来是扫描时候通过反射获取的值 回去再看看~ 3Q~
0
首席撸出血
首席撸出血

这个是java的注解

上网搜JAVA注解,一堆教程。

无名的骑士
无名的骑士
我知道是注解, 我也知道正常的用法 我想问的是Spring那种可选参数的注解是如何进行赋值的
0
554330833a
554330833a
注解还有默认值的吗?
公孙二狗
公孙二狗
回复 @无名的骑士 : 那么它的name就是 首写字母小写后的值,Spring 写的逻辑实现的,不是注解本身的功能
554330833a
554330833a
注解只是接口吧,具体获取值是框架去获取的
无名的骑士
无名的骑士
声明的注解是可以设置和返回值的 我想知道的就是Spring 对于@Resourse注解里的一些属性是如何赋值,才能做到即时用注解时不带参数也能有值 类似@Resourse 如果不跟参数 那么它的name就是 首写字母小写后的值
0
公孙二狗
公孙二狗

注解可以有默认值的

@Target(ElementType.FIELD) // 作用在属性上
@Retention(RetentionPolicy.RUNTIME)
@interface ResponseMeta {
    public boolean editable() default false;
    public String description() default "";
    public Country country() default Country.CHINA;
}



返回顶部
顶部