Java >> Java tutorial >  >> Tag >> maven

Java 8 Reflection Adgang til parameternavne på metode og konstruktør med Maven, Gradle og Eclipse ved hjælp af -parametre Compiler-argument

Denne side vil gennemgå java 8-reflektionsadgang til parameternavne på metode og konstruktør med maven, gradle og eclipse ved hjælp af "-parameters" Compiler Argument. Java 8 giver java.lang.reflect.Parameter klasse, der vil give information om parameternavn og dets modifikatorer. Før java 8 kan vi ikke direkte få parametrenes navn på en metode eller konstruktør. Spring og andre rammer bruger annotering på parameterniveau til at få metodeparameternavn. Her på denne side vil vi give -parameters konfiguration i maven, gradle og eclipse. For at få parameternavne javac skal bruge -parameters som javac -parameters .

Sådan får du adgang til parameternavne

Vi vil diskutere to scenarier.

Scenarie 1 - Brug af Java 8 Reflection API
Ved brug af Java 8 Reflection API skal vi følge to trin.
a. Kompiler kildekode ved hjælp af javac -parameter .
b. Brug Parameter klasse for at få adgang til metode- og konstruktørparametre ved hjælp af dens metoder såsom isNamePresent() og getName() .

isNamePresent() tjekker om .class indeholder originale parameternavne som i kildekoden eller ej. Hvis vi ikke har brugt -parameters compiler-argument, vil det returnere false ellers sandt .
getName() returnerer parameternavnene. Hvis -parameters kompileringsargumentet er ikke blevet brugt, getName() metoden returnerer parameternavn som arg0, arg1 osv.

Scenario 2- Før Java 8 uden at bruge parameterklassen.
Rammer som spring bruger annotering til at få parameternavn. Parametre er annoteret med værdien som parameternavn. Find kodestykket.
public String info(@RequestParam(value="key") String key) {
} 
Ved hjælp af refleksions-API tilgås annotationsværdien.



Java 8 "-parameters" compilerargument

For at få metode- og konstruktørparameternavnene er det nødvendigt, at klassen skal kompileres ved hjælp af -parameters compiler argument. Med denne kompilering .class fil beholder metode og konstruktørparameter som defineret i kildekoden. Hvis vi ikke bruger -parameters kompileringsargument efter kompilering .class filen beholder ikke det originale parametrenavn som i kildekoden, og den omdøbes til arg0, arg1 osv. For at få parameternavne javac skal bruge -parameters som følger

javac -parametre

Indstil "-parameters" kompilatorargument i Eclipse

For at indstille -parameters compiler-argument i ellipse, følg nedenstående trin.

1. Gå til Window-> Preferences-> Java-> Compiler
2. Vælg Gem oplysninger om metodeparametre (kan bruges via refleksion) og klik ok. Dette svarer til javac -parametre kommando.

Find udskriftsskærmen.

Gradle ved hjælp af "-parameters" compilerargument

Find gradle-filen for at bruge -parameters compiler-argument.
build.gradle
apply plugin: 'java'
apply plugin: 'eclipse'
archivesBaseName = 'Concretepage'
version = '1.0-SNAPSHOT' 
gradle.projectsEvaluated {
     tasks.withType(JavaCompile) {
         options.compilerArgs << "-parameters"
     }
}
repositories {
    mavenCentral()
}
dependencies {

}  



Maven ved hjælp af "-parameters" compilerargument

Find maven-filen for at bruge -parameters kompileringsargument.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.concretepage.app</groupId>
    <artifactId>commonapp</artifactId>
    <version> 1.0-SNAPSHOT</version>
    <packaging>jar</packaging>      
    <name>Java App with Maven</name>
    <dependencies>
    </dependencies>
    <build>
	<plugins> 
	 <plugin>
	  <groupId>org.apache.maven.plugins</groupId>
	  <artifactId>maven-compiler-plugin</artifactId>
		<version>3.5</version>
		<configuration>
		    <compilerArgs>
		    	<arg>-parameters</arg>
		    </compilerArgs>
		</configuration>
	 </plugin>
	</plugins>
    </build>  
 </project> 

Adgangsmetodeparametre ved hjælp af Java 8 Reflection

Find eksemplet for at få adgang til metodeparametres navn ved hjælp af java 8 reflection API.
MethodParameterNamesDemo.java
package com.concretepage;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
public class MethodParameterNamesDemo {
	public static void main(String[] args) throws NoSuchMethodException, SecurityException {
		Method[] methods = BookService.class.getDeclaredMethods();
		for (Method method : methods) {
			System.out.println(method.getName());
			System.out.println("-------------");
			Parameter[] parameters = method.getParameters();
			for (Parameter p : parameters) {
				if (p.isNamePresent()) {
					System.out.println(p.getName());
				}
			}
		}
	}
} 
BookService.java
package com.concretepage;
public class BookService {
	public BookService(Integer bookId, String bookDesc) {
		System.out.println(bookId +":"+ bookDesc );
	}
	public void evaluateBook(String bookName, Integer bookPrice) {
		System.out.println(bookName + ":" + bookPrice);
	}
} 
Find outputtet.
evaluateBook
-------------
bookName
bookPrice 

Få adgang til konstruktorparametre ved hjælp af Java 8 Reflection

Find eksemplet for at få adgang til konstruktorparametrenes navn ved hjælp af java 8 reflection API.
ConstructorParameterNamesDemo.java
package com.concretepage;
import java.lang.reflect.Constructor;
import java.lang.reflect.Parameter;
public class ConstructorParameterNamesDemo {
	public static void main(String[] args) throws NoSuchMethodException, SecurityException {
		Constructor<?>[] constructors = BookService.class.getDeclaredConstructors();
		for (Constructor<?> constructor : constructors) {
			System.out.println(constructor.getName());
			System.out.println("-------------");
			Parameter[] parameters = constructor.getParameters();
			for (Parameter p : parameters) {
				if (p.isNamePresent()) {
					System.out.println(p.getName());
				}
			}
		}
	}
} 
Find outputtet.
com.concretepage.BookService
-------------
bookId
bookDesc 

Download kildekode

java-8-reflection-access-to-parameter-names-of-method-and-constructor-with-maven-gradle-and-eclipse-using-parameters-compiler-argument.zip
Java tag