برنامه نویسی

ملزومات بهاری: نحوه استفاده از حاشیه نویسی bean برای خدمات سفارشی

در برنامه ما اشیاء زیادی داریم. این اشیاء مؤلفه های کاربرد ما هستند. وقتی می خواهیم بهار این اشیاء را ایجاد ، مدیریت و تزریق کنیم ، آنها لوبیای بهاری در نظر گرفته می شوند.

در @Bean حاشیه نویسی یک حاشیه نویسی در سطح روش است که می توانیم از آن استفاده کنیم تا بهار بگوییم که می خواهیم آن را برای ما مدیریت کند.

هنگام شروع زمینه برنامه ، بهار به دنبال این موارد خواهد بود @Bean روش ها را برای مدیریت چرخه عمر خود به ظرف IOC اضافه کنید تا سایر اجزای بتوانند از آنها تزریق و استفاده کنند.

این حاشیه نویسی معمولاً در کلاسهای پیکربندی قرار می گیرد. همانطور که می دانیم ، بهار در حال حاضر دارای تنظیم خودکار برای منابعی مانند Spring Kafka ، Cache Spring و غیره است.

اما اگر می خواهید یک منبع سفارشی ، مانند یک سرویس اعلان سفارشی ، با استفاده از @Bean در دسترس قرار دادن این لوبیای سفارشی در برنامه خود ، راهی است که باید انجام شود.

در بعضی موارد ، ما می توانیم از @Bean حاشیه نویسی برای سفارشی کردن برخی از لوبیای خودکار تنظیم شده. این به ما امکان می دهد پیکربندی پیش فرض را با یک نسخه اصلاح شده متناسب با نیازهای ما جایگزین کنیم.

بیایید نگاهی بیندازیم.

ایجاد لوبیا سفارشی

در این سناریو ، برنامه ما باید از یک سرویس SMTP سفارشی برای ارسال ایمیل استفاده کند. ما می توانیم روشی را برای فوری سرویس همانطور که نیاز داریم ایجاد کنیم و شی را برگردانیم. از آنجا که ما می خواهیم این یک لوبیا تبدیل شود ، ما روش را با آن حاشیه نویسی می کنیم @Bean برای گفتن بهار برای قرار دادن این شیء در بهار IOC به عنوان لوبیا.

package org.spring.mastery.config;

import org.spring.mastery.service.SmtpNotificationService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class NotificationConfig {

    @Bean
    public SmtpNotificationService smtpNotificationService() {
        return new SmtpNotificationService("smtp.example.com", 587, "username", "password");
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

کلاس ما می خواهیم یک لوبیای سفارشی باشیم:

package org.spring.mastery.service;

public class SmtpNotificationService {

    public SmtpNotificationService(String host, int port, String username, String password) {
        //add fake behavior
        System.out.println(STR."Connecting to SMTP server at \{host}:\{port}");
        System.out.println(STR."Authenticating with username: \{username}");
        System.out.println("Sending a test email to verify connection...");
        System.out.println("Email sent successfully. Connection verified.");
    }

    public void sendEmail(String mail, String subject, String message) {
        System.out.println(STR."Sending email to \{mail}...");
        System.out.println(STR."Email subject: \{subject}");
        System.out.println(STR."Email message: \{message}");
        System.out.println("Email sent successfully.");

    }
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

با استفاده از لوبیای سفارشی

اکنون می توانیم از لوبیای سفارشی که ایجاد کردیم تزریق و استفاده کنیم.

package com.example.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class NotificationService {

    private final SmtpNotificationService smtpNotificationService;

    @Autowired
    public NotificationService(SmtpNotificationService smtpNotificationService) {
        this.smtpNotificationService = smtpNotificationService;
    }

    public void sendNotification(String message) {
        smtpNotificationService.sendEmail("recipient@example.com", "Subject", message);
    }
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اگر پروژه را اجرا کنیم ، باید ببینیم که بهار لوبیا را برای ما ایجاد کرده و تنظیم لوبیا باید مانند این در کنسول ظاهر شود:

2025-04-11T10:04:25.296-03:00  INFO 11240 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
Connecting to SMTP server at smtp.example.com:587
Authenticating with username: username
Sending a test email to verify connection...
Email sent successfully. Connection verified.
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اصلاح لوبیا

برخی از کتابخانه های بهاری می توانند لوبیای آماده استفاده را برای استفاده از شما فراهم کنند. مثل کافکا بهار. شما فقط باید وابستگی ها و خصوصیات پیکربندی مربوطه را اضافه کنید و خوب است که بروید.


    org.springframework.kafka
    spring-kafka
    3.3.4

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

# Kafka Configuration
spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

package org.spring.mastery.service;

import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;

@Service
public class KafkaService {

    private final KafkaTemplate<String, String> kafkaTemplate;

    public KafkaService(KafkaTemplate<String, String> kafkaTemplate) {
        this.kafkaTemplate = kafkaTemplate;
    }

    public void sendMessage(String topic, String message) {
        kafkaTemplate.send(topic, message);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اما اگر می خواهیم آن را سفارشی کنیم ، می توانیم از @Bean برای ایجاد یک لوبیای سفارشی تر متناسب با نیازهای برنامه ما.

package org.spring.mastery.config;

import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.StringSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.core.DefaultKafkaProducerFactory;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.core.ProducerFactory;
import org.springframework.kafka.support.serializer.JsonSerializer;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class KafkaConfig {

    @Bean
    public ProducerFactory<String, String> producerFactory() {
        Map<String, Object> configProps = new HashMap<>();
        configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
        return new DefaultKafkaProducerFactory<>(configProps);
    }

    @Bean
    public KafkaTemplate<String, String> kafkaTemplate() {
        System.out.println("Create custom kafka bean");
        return new KafkaTemplate<>(producerFactory());
    }
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

کنسول نشان می دهد که لوبیای ما ایجاد شده است:

2025-04-11T11:06:23.541-03:00  INFO 22032 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
Create custom kafka bean
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون یاد گرفته اید که چگونه از @Bean حاشیه نویسی برای گفتن بهار برای رسیدگی به لوبیای سفارشی شما.

این پیکربندی را کاوش کرده و افکار خود را در نظرات یا رسانه های اجتماعی به اشتراک بگذارید.

اگر این موضوع را دوست دارید ، حتماً مرا دنبال کنید. در روزهای بعد ، من در مورد حاشیه نویسی بهار بیشتر توضیح خواهم داد! با ما همراه باشید!

Willian Moya (willianfmoya) / x (twitter.com)

Willian Ferreira Moya | وابسته به لینکدین

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا