تعليق قيمة الربيع

الربيع @Value التعليق يُستخدم لتعيين قيم افتراضية للمتغيرات والمعاملات الطريقة. يمكننا قراءة متغيرات بيئة الربيع وكذلك متغيرات النظام باستخدام @Value التعليق. يدعم @Value التعليق الربيع أيضًا SpEL. لنلقي نظرة على بعض الأمثلة على استخدام @Value التعليق.

الربيع @Value – القيمة الافتراضية

يمكننا تعيين قيمة افتراضية لخاصية الفئة باستخدام @Value التعليق.

@Value("Default DBConfiguration")
private String defaultName;

@Value يمكن أن يكون وسيط تعليق سلسلة فقط، ولكن الربيع يحاول تحويله إلى النوع المحدد. سيعمل الكود أدناه بشكل صحيح ويعين القيم المنطقية والصحيحة للمتغير.

@Value("true")
private boolean defaultBoolean;

@Value("10")
private int defaultInt;

الربيع @Value – خاصية بيئة الربيع

@Value("${APP_NAME_NOT_FOUND}")
private String defaultAppName;

إذا لم يتم العثور على المفتاح في خصائص بيئة الربيع، سيكون قيمة الخاصية ${APP_NAME_NOT_FOUND}. يمكننا تعيين قيمة افتراضية سيتم تعيينها إذا كان المفتاح مفقودًا من خصائص بيئة الربيع.

@Value("${APP_NAME_NOT_FOUND:Default}")
private String defaultAppName;

Spring @Value – بيئة النظام

عندما تتم ملء بيئة الربيع، يقرأ جميع متغيرات البيئة النظامية ويخزنها كخصائص. لذا يمكننا أيضًا تعيين متغيرات النظام باستخدام تعليق @Value.

@Value("${java.home}")
private String javaHome;
	
@Value("${HOME}")
private String homeDir;

Spring @Value – SpEL

يمكننا أيضًا استخدام لغة تعبير الربيع مع التعليق @Value. لذا يمكننا قراءة خاصية نظام java home باستخدام SpEL أيضًا.

@Value("#{systemProperties['java.home']}")
private String javaHome;

Spring @Value مع الطرق

عند العثور على التعليق @Value في الطريقة، ستقوم سياق Spring باستدعائه عند تحميل جميع تكوينات Spring والفولفول الخاص بها. إذا كانت للطريقة عدة وسائط، فإن قيمة كل وسيط يتم تعيينها من تعليق الطريقة. إذا كنا نريد قيمًا مختلفة لوسائط مختلفة، يمكننا استخدام تعليق @Value مباشرة مع الوسيط.

@Value("Test")
public void printValues(String s, String v){} //both 's' and 'v' values will be 'Test' 
@Value("Test")
public void printValues(String s, @Value("Data") String v){}
// s=Test, v=Data

Spring @Value Example

لنقم بإنشاء تطبيق بسيط باستخدام Spring حيث سنستخدم تعليق @Value لقراءة الخصائص وتعيينها إلى متغيرات الصف. أنشئ مشروعًا Maven وأضف تبعيات نواة Spring.

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.0.6.RELEASE</version>
</dependency>

ستكون هيكلة المشروع النهائية كما هو موضح في الصورة أدناه، سننظر في كل من العناصر واحدة تلو الأخرى. قم بإنشاء فئة مكون حيث سنحقق قيم المتغيرات من خلال تعليق @Value.

package com.journaldev.spring;

import org.springframework.beans.factory.annotation.Value;

public class DBConnection {

	@Value("${DB_DRIVER_CLASS}")
	private String driverClass;
	@Value("${DB_URL}")
	private String dbURL;
	@Value("${DB_USERNAME}")
	private String userName;
	@Value("${DB_PASSWORD}")
	private char[] password;

	public DBConnection() {
	}

	public void printDBConfigs() {
		System.out.println("Driver Class = " + driverClass);
		System.out.println("DB URL = " + dbURL);
		System.out.println("User Name = " + userName);

		// لا تفعل ذلك في بيئة الإنتاج :D
		System.out.println("Password = " + String.valueOf(password));
	}
}

الآن يجب علينا إنشاء فئة تكوين وتوفير @Bean طريقة لفئة DBConnection.

package com.journaldev.spring;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration
@PropertySource("classpath:db.properties")
@PropertySource(value = "classpath:root.properties", ignoreResourceNotFound = true)
public class DBConfiguration {

	@Value("Default DBConfiguration")
	private String defaultName;

	@Value("true")
	private boolean defaultBoolean;

	@Value("10")
	private int defaultInt;

	@Value("${APP_NAME_NOT_FOUND:Default}")
	private String defaultAppName;

	// @Value("#{systemProperties['java.home']}")
	@Value("${java.home}")
	private String javaHome;

	@Value("${HOME}")
	private String homeDir;

	@Bean
	public DBConnection getDBConnection() {
		DBConnection dbConnection = new DBConnection();
		return dbConnection;
	}

	@Value("Test")
	public void printValues(String s, @Value("another variable") String v) {
		System.out.println("Input Argument 1 =" + s);
		System.out.println("Input Argument 2 =" + v);

		System.out.println("Home Directory = " + homeDir);
		System.out.println("Default Configuration Name = " + defaultName);
		System.out.println("Default App Name = " + defaultAppName);
		System.out.println("Java Home = " + javaHome);
		System.out.println("Boolean = " + defaultBoolean);
		System.out.println("Int = " + defaultInt);

	}

}

هذا هو صفنا الرئيسي حيث نقوم بإنشاء سياق Spring القائم على التعليق.

package com.journaldev.spring;

import java.sql.SQLException;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class SpringMainClass {

	public static void main(String[] args) throws SQLException {
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
		context.scan("com.journaldev.spring");
		context.refresh();
		System.out.println("Refreshing the spring context");
		DBConnection dbConnection = context.getBean(DBConnection.class);

		dbConnection.printDBConfigs();
		
		 // أغلق سياق الربيع 
		context.close();
	}

}

عند تشغيل الصف ، سينتج الناتج التالي.

Input Argument 1 =Test
Input Argument 2 =another variable
Home Directory = /Users/pankaj
Default Configuration Name = Default DBConfiguration
Default App Name = Default
Java Home = /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
Boolean = true
Int = 10
Refreshing the spring context
Driver Class = com.mysql.jdbc.Driver
DB URL = jdbc:mysql://localhost:3306/Test
User Name = journaldev
Password = journaldev

لاحظ أن فئة التكوين printValues() يتم استدعاؤها قبل أن يكون سياقنا جاهزًا لخدمة طلبات المستخدم. هذا كل شيء بالنسبة لمثال تعليق @Value في Spring ، يمكنك تنزيل رمز المثال من مستودع GitHub الخاص بنا.

مشروع تعليق Spring @Value

Source:
https://www.digitalocean.com/community/tutorials/spring-value-annotation