java 多个实现类同时implements同一个interface 接口注入的时候用spring annotation注解形式注入

@Resource("这里写bean的ID或者Name")

如果你的bean也是通过annotation注解

加入是@Service 那你就这么写@Service("这里就是bean的ID")

可以用反射区获取注解,然后判断一下就ok了。

public boolean havaAnnotation(Annotation myannotation){

 

   Person person = new Person(); //假设有个Person类

   

   Class class= perongetClass();

   

   Annotation[] annotations=classgetAnnotations();

   

    for(i=0;i<annotationslength;i++){  //遍历循环

    

         if(annotations[i]hashCode()==myannotationhashCode()) //用哈希码判断

  

       return true;

 

    }

 

   return false;

 

  }

import javalangannotationRetention;

import javalangannotationRetentionPolicy;

@Retention(value=RetentionPolicyRUNTIME)

public @interface MyAnnotation {

String name();

}

public class AnnonTestA {

public void methodA(){

}

@MyAnnotation(name="111")

public void methodA(String a) throws Exception{

AnnonTestBmethodB("methodA",Stringclass);

}

}import javalangannotationAnnotation;

import javalangreflectMethod;

public class AnnonTestB {

public static void methodB(String methodName, Class<> parameterTypes) throws Exception {

AnnonTestA annonTestA = new AnnonTestA();

// 获取AnnotationTest2的Class实例

Class<AnnonTestA> c = AnnonTestAclass;

// 获取需要处理的方法Method实例

Method method = cgetMethod(methodName, parameterTypes);

Method[] methods = cgetMethods();

// 判断该方法是否包含MyAnnotation注解

if (methodisAnnotationPresent(MyAnnotationclass)) {

// 获取该方法的MyAnnotation注解实例

MyAnnotation myAnnotation = method

getAnnotation(MyAnnotationclass);

// 执行该方法

// methodinvoke(annonTestA, "12345");

// 获取myAnnotation

String value1 = myAnnotationname();

Systemoutprintln(value1);

}

// 获取方法上的所有注解

Annotation[] annotations = methodgetAnnotations();

for (Annotation annotation : annotations) {

Systemoutprintln(annotation);

}

}

}import javaio;

import javalangannotationAnnotation;

import javalangreflectMethod;

public class TestString {

public static void main(String[] args) throws Exception {

AnnonTestA annonTestA = new AnnonTestA();

annonTestAmethodA("123");

}

}

代码都给上了,不明白再追问吧。

参考地址:>

Annontation是Java5开始引入的新特征。中文名称一般叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。

annotation一般作为一种辅助途径,应用在软件框架或工具中,在这些工具类中根据不同的 annontation注解信息采取不同的处理过程或改变相应程序元素(类、方法及成员变量等)的行为。

例如:Junit、Struts、Spring等流行工具框架中均广泛使用了annontion。使代码的灵活性大提高。

从java5版本开始,自带了三种标准annontation类型,

(1)、Override

javalangOverride 是一个marker annotation类型,它被用作标注方法。它说明了被标注的方法重载了父类的方法,起到了断言的作用。如果我们使用了这种annotation在一个没有覆盖父类方法的方法时,java编译器将以一个编译错误来警示。

这个annotaton常常在我们试图覆盖父类方法而确又写错了方法名时加一个保障性的校验过程。

(2)、Deprecated

Deprecated也是一种marker annotation。当一个类型或者类型成员使用@Deprecated修饰的话,编译器将不鼓励使用这个被标注的程序元素。所以使用这种修饰具有一定的 “延续性”:如果我们在代码中通过继承或者覆盖的方式使用了这个过时的类型或者成员,虽然继承或者覆盖后的类型或者成员并不是被声明为@Deprecated,但编译器仍然要报警。

注意:@Deprecated这个annotation类型和javadoc中的 @deprecated这个tag是有区别的:前者是java编译器识别的,而后者是被javadoc工具所识别用来生成文档(包含程序成员为什么已经过时、它应当如何被禁止或者替代的描述)。

(3)、SuppressWarnings

此注解能告诉Java编译器关闭对类、方法及成员变量的警告。

有时编译时会提出一些警告,对于这些警告有的隐藏着Bug,有的是无法避免的,对于某些不想看到的警告信息,可以通过这个注解来屏蔽。

SuppressWarning不是一个marker annotation。它有一个类型为String[]的成员,这个成员的值为被禁止的警告名。对于javac编译器来讲,被-Xlint选项有效的警告名也同样对@SuppressWarings有效,同时编译器忽略掉无法识别的警告名。

spring 注解可以减少xml配置;

注释配置相对于 XML 配置具有很多的优势:

它可以充分利用 Java

的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用 JPA 注释配置 ORM 映射时,我们就不需要指定 PO

的属性名、类型等信息,如果关系表字段和 PO 属性名、类型都一致,您甚至无需编写任务属性映射信息——因为这些信息都可以通过 Java

反射机制获取。

注释和 Java 代码位于一个文件中,而 XML

配置采用独立的配置文件,大多数配置信息在程序开发完成后都不会调整,如果配置信息和 Java 代码放在一起,有助于增强程序的内聚性。而采用独立的

XML 配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。

我知道

1先获取这个类的class

Class<> objclass=tgetClass();

2 获取这个类的字段属性

Field[] at = objclassgetDeclaredFields();

3遍历所有字段

for (Field fd : at) {

//比如获取这个字段上是否包含NotNull

if (fdisAnnotationPresent(NotNullclass)) {

//这样就获取到这个注解属性了

NotNull d = fdgetAnnotation(NotNullclass);

}

}

4要获取一个注解,你要先获取他所在的字段

希望对你有帮助!

以上就是关于java 多个实现类同时implements同一个interface 接口注入的时候用spring annotation注解形式注入全部的内容,包括:java 多个实现类同时implements同一个interface 接口注入的时候用spring annotation注解形式注入、java判断类上是否有指定注解、java 获取调用此方法的方法的注解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9648903.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存