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

تُسمح لنا تعليمات Spring بتكوين التبعيات وتنفيذ حقن التبعيات من خلال برامج Java.

تعليمات Spring

  • إن إطار العمل Spring ينفذ ويروج لمبدأ انعكاس التحكم (IoC) أو حقن التبعيات (DI) وهو في الواقع حاوية IoC.
  • تقليديًا، تُسمح Spring للمطور بإدارة تبعيات الفولجات باستخدام تكوين قائم على XML.
  • هناك وسيلة بديلة لتحديد الفولجات وتبعياتها. هذه الطريقة هي تكوين قائم على Java.
  • على عكس النهج الخاص بالـ XML، يُسمح لك تكوين قائم على Java بإدارة مكونات الفولجات بشكل برمجي. لهذا السبب تم تقديم تعليمات Spring.

في هذا المقال، سنستكشف أكثر التعليمات المستخدمة بشكل شائع في Spring ونلقي نظرة على بعض الأمثلة البرمجية.

قائمة تعليمات Spring

بعض تعليمات نواة إطار العمل Spring هي:

  1. @Configuration: تُستخدم للدلالة على أن الفئة تعلن واحدة أو أكثر من أساليب @Bean. يتم معالجة هذه الفئات من قبل حاوية Spring لإنشاء تعريفات الفولجات وطلبات الخدمة لتلك الفولجات في وقت التنفيذ.

  2. @فول: يشير إلى أن الطريقة تنتج فولًا يتم إدارته بواسطة حاوية Spring. هذه واحدة من أكثر التعليقات الربيعية استخدامًا وأهميّة. يمكن أيضًا استخدام تعليق @فول مع معلمات مثل الاسم و initMethod و destroyMethod.

    • name – يسمح لك بإعطاء اسم للفول
    • initMethod – يسمح لك باختيار الطريقة التي ستتم استدعاؤها عند تسجيل السياق
    • destroyMethod – يسمح لك باختيار الطريقة التي ستتم استدعاؤها عند إيقاف تشغيل السياق

    على سبيل المثال:

    @التكوين
    public class AppConfig {
    
        @Bean(name = "comp", initMethod = "turnOn", destroyMethod = "turnOff")
        Computer computer(){
            return new Computer();
        }
    }
    
    public class Computer {
    
        public void turnOn(){
            System.out.println("Load operating system");
        }
        public void turnOff(){
            System.out.println("Close all programs");
        }
    }
    
  3. @PreDestroy و @PostConstruct هما طريقة بديلة لطريقة initMethod و destroyMethod للفول الفول. يمكن استخدامها عندما يتم تحديد فئة الفول بواسطتنا. على سبيل المثال؛

     public class Computer {
    
        @PostConstruct
        public void turnOn(){
            System.out.println("Load operating system");
        }
    
        @PreDestroy
        public void turnOff(){
            System.out.println("Close all programs");
        }
    }
    
  4. @ComponentScan: يكون مسح المكونات لاستخدامها مع التوجيهات @Configuration مثالًا على ذلك. هنا يمكننا تحديد الحزم الأساسية لفحص المكونات الربيعية.

  5. @Component: يشير إلى أن الفئة المحددة هي “مكون”. تعتبر هذه الفئات مرشحة للاكتشاف التلقائي عند استخدام التكوين المستند إلى التعليمات البرمجية والمسح الضوئي لمسار الفئة.

  6. @PropertySource: يوفر آلية إعلانية بسيطة لإضافة مصدر خاصية إلى بيئة Spring. هناك تعليق مماثل لإضافة مصفوفة من ملفات مصدر الخاصية، أي @PropertySources.

  7. @Service: يشير إلى أن الفئة المحددة هي “خدمة”. يعد هذا التعليق تخصصًا لـ @Component، مما يتيح اكتشاف فئات التنفيذ تلقائيًا من خلال فحص مسار الفئة.

  8. @Repository: يشير إلى أن الفئة المحددة هي “مستودع”. يعتبر هذا التعليق تخصصًا لـ @Component ويُنصح باستخدامه مع فئات DAO.

  9. @تمت تحديد: تستخدم تعليقة Spring @تمت تحديد لحقن الفول الآلي للفول. تستخدم تعليقة Spring @مؤهل بالتزامن مع Autowired لتجنب الارتباك عندما يكون لدينا فولانان أو أكثر تم تكوينهما لنفس النوع.

تعليقات Spring MVC

بعض تعليقات Spring MVC المهمة هي:

  1. @تحكم
  2. @طلب المسار
  3. @PathVariable
  4. @RequestParam
  5. @ModelAttribute
  6. @RequestBody و @ResponseBody
  7. @RequestHeader و @ResponseHeader

يمكنك معرفة المزيد حولها في دورة تعلم Spring MVC.

تعلم تسوية المعاملات في Spring

@Transactional هو تسمية إدارة المعاملات التصريحية في Spring، اقرأ المزيد في دورة Spring MVC Hibernate.

تعلم توجيه الأمان في Spring

@EnableWebSecurity يستخدم مع صف @Configuration لتعريف تكوين الأمان في Spring ، اقرأ المزيد في مثال على أمان الربيع.

تعليمات تشغيل الربيع

  1. @SpringBootApplication
  2. @EnableAutoConfiguration

اقرأ المزيد في مثال على تشغيل الربيع.

مثال على تعليمات الربيع

لنلقي نظرة على مثال بسيط حيث سنستخدم تعليمات الربيع في تطبيقنا. توضح الصورة أدناه مشروع مثالي لتعليمات Spring Annotations.

تبعيات إطار الربيع

I have created the maven project and added Spring Core Framework dependencies.

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.journaldev.spring</groupId>
	<artifactId>spring-annotations</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Spring Annotations</name>

	<properties>
		<spring.framework>4.3.0.RELEASE</spring.framework>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.framework}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.framework}</version>
		</dependency>

	</dependencies>

</project>

سيقوم هذا بجلب جميع ملفات الأساسية الربيعية لمشروعنا.

فئات المكونات

الخطوة التالية هي إنشاء فئات المكونات. هنا أحاكي عدة مكونات قاعدة بيانات، واحدة لـ MySQL وأخرى لـ Oracle.

package com.journaldev.drivers;

public interface DataBaseDriver {
    public String getInfo();
}

DataBaseDriver هو الواجهة الأساسية interface التي سنقوم بتنفيذها.

package com.journaldev.drivers;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@PropertySource("classpath:mysqldatabase.properties")
public class MySqlDriver implements DataBaseDriver {

    @Value("${databaseName}")
    private String databaseName;
    @Value("${disableStatementPooling}")
    private String disableStatementPooling;

    public String getInfo() {
        return "[ Driver: mySql" +
                ", databaseName: " + databaseName +
                ", disableStatementPooling: " + disableStatementPooling +
                " ]";
    }
}

لاحظ استخدام التعليق @Component لإشارة إطار العمل Spring بمعاملة هذه الفئة كـ مكون. نحن نستخدم أيضًا التعليقات @PropertySource و @Value، Spring سوف يستخدمها في وقت التشغيل لحقن وتعيين قيم هذه المتغيرات من ملف الخصائص المحدد. فيما يلي الخصائص المعرفة في ملف mysqldatabase.properties.

databaseName=school
disableStatementPooling=true
package com.journaldev.drivers;

public class OracleDriver implements DataBaseDriver {

    protected String url;
    protected String user;
    protected String password;
    protected String driver;
    protected Integer port;


    public String getUrl() {
        return url;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public Integer getPort() {
        return port;
    }

    public void setPort(Integer port) {
        this.port = port;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getInfo() {
        return "[ Driver: Oracle" +
                ", url: " + url +
                ", port; " + port +
                ", user: " + user +
                ", password: " + password  +
                ", driver: " + driver +
                " ] ";
    }
}

OracleDriver هو شجرة بسيطة، سنستخدم فئة الخدمة لحقن الخصائص في هذه الشجرة.

فئة الخدمة Spring

package com.journaldev.service;

import com.journaldev.drivers.DataBaseDriver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    @Qualifier("oracleDriver")
    private DataBaseDriver dataBaseDriver;

    public String getDriverInfo(){
        return dataBaseDriver.getInfo();
    }
}

هنا نستخدم التعليق @Service لإشارة إطار العمل Spring بمعاملة هذا كفئة خدمة. ثم نستخدم التعليقات @Autowired و @Qualifier("oracleDriver") لإخبار إطار العمل Spring بحقن شجرة مسماة بـ oracleDriver في خاصية الفئة dataBaseDriver. لاحظ أننا لم ننشئ هذه الشجرة Spring بعد.

شجرات Spring

الخطوة النهائية هي إنشاء شجرات Spring وفئات التكوين للربط بين كل شيء.

package com.journaldev.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;

import com.journaldev.drivers.DataBaseDriver;
import com.journaldev.drivers.MySqlDriver;
import com.journaldev.drivers.OracleDriver;

@Configuration
@ComponentScan("com.journaldev")
@PropertySource("classpath:oracledatabase.properties")
public class AppConfig {

	@Autowired
        Environment environment;
	
	@Bean
	DataBaseDriver oracleDriver() {
        OracleDriver oracleDriver = new OracleDriver();
	oracleDriver.setDriver(environment.getProperty("db.driver"));
        oracleDriver.setUrl(environment.getProperty("db.url"));
        oracleDriver.setPort(Integer.parseInt(environment.getProperty("db.port")));
        oracleDriver.setUser(environment.getProperty("db.user"));
        oracleDriver.setPassword(environment.getProperty("db.password"));

        return oracleDriver;

	}

	@Bean
	DataBaseDriver mysqlDriver() {
		return new MySqlDriver();
	}
}

لاحظ تعريف الشجرة لـ oracleDriver. في هذه الطريقة، نقوم بقراءة الخصائص من ملف oracledatabase.properties التي تم تعيينها لمتغير environment بواسطة إطار العمل Spring. فيما يلي الخصائص المعرفة في ملف oracledatabase.properties.

db.url=localhost
db.port=4444
db.user=vasiliy
db.password=yilisav
db.driver=driver_name

مشروع مثال تعليقاتنا الربيعي جاهز للفحص. كملخص، قمنا باتخاذ الخطوات التالية:

  1. أنشأنا مشروعًا Maven وأضفنا التبعيات اللازمة للربيع.
  2. أنشأنا فئات المكونات وقمنا بحقن الخصائص من ملف مورد إلى متغيرها.
  3. إذا كان لدينا مكون خارجي، يمكننا استخدام فئة الخدمة لحقن التبعيات فيه. تمامًا كما فعلنا لـ OracleDriver من خلال فئة UserService.
  4. أخيرًا، قمنا بإنشاء فئة تكوين لتعريف فولف الربيع وتحديد الحزمة الأساسية لفحص فئات مكون الربيع وتكوينها.

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

فيما يلي فئتنا الرئيسية لاختبار مشروع مثال تعليقاتنا الربيعي.

package com.journaldev;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;

import com.journaldev.config.AppConfig;
import com.journaldev.drivers.DataBaseDriver;
import com.journaldev.service.UserService;

public class Main {
	public static void main(String[] args) {
	AbstractApplicationContext appContext = new AnnotationConfigApplicationContext(AppConfig.class);

	DataBaseDriver oracle = appContext.getBean("oracleDriver", DataBaseDriver.class);
	DataBaseDriver mysql = appContext.getBean("mysqlDriver", DataBaseDriver.class);
		
        System.out.println("Oracle driver info:");
        System.out.println(oracle.getInfo());
        
        System.out.println("MySQL driver info:");
        System.out.println(mysql.getInfo());

        System.out.println("UserService Information");
	UserService userService = appContext.getBean(UserService.class);
	System.out.println(userService.getDriverInfo());

	appContext.close();
	}
}

تظهر الصورة أدناه الإخراج الذي تم إنتاجه. لاحظ أننا لم نقم بتكوين أي إطار تسجيل، لذلك يتم طباعة جميع تسجيلات إطار الربيع في وحدة التحكم بلون أحمر. هذا كل شيء لمقدمة موجزة حول تعليقات الربيع. لقد قمت هنا بسرد معظم التعليقات الهامة، ولكن هناك العديد منها للمهام المحددة. يمكنك تحميل مشروع مثال تعليقاتي الربيعي من الرابط أدناه.

تنزيل مشروع مثال التعليقات الربيع

المرجع: مستندات الواجهة البرمجية للتطبيقات

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