توصيل الـ beans: @Component و@Service و@Repository
استخدم تعليقات التصنيف النمطية، وعرّف beans باستخدام @Bean، وافهم فحص المكوّنات
توصيل الـ beans: @Component و@Service و@Repository درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.
التعليقات التوضيحية النمطية
يوفّر Spring تعليقات توضيحية نمطية تضع علامة على الفئات باعتبارها Beans يديرها Spring، وتوضح دورها: @Component (عام)، و@Service (منطق الأعمال)، و@Repository (الوصول إلى البيانات)، و@Controller/@RestController (طبقة الويب).
@Component: Bean عام
تُكتشف أي فئة تحمل التعليق التوضيحي @Component أثناء فحص المكوّنات، وتُسجَّل كـBean في Spring. وهو الأساس لجميع الأنماط الأخرى.
@Component
public class EmailFormatter {
public String format(String to, String subject) {
return "To: " + to + "\nSubject: " + subject;
}
}@Service: طبقة منطق الأعمال
يُعد @Service تخصصًا من @Component يشير دلاليًا إلى فئة خدمة. ويعامله Spring مثل @Component، لكنه يوضح القصد وقد يستخدمه مستشارو AOP.
@Service
public class OrderService {
private final OrderRepository repo;
public OrderService(OrderRepository repo) { this.repo = repo; }
public Order placeOrder(Cart cart) { /* business logic */ return repo.save(new Order(cart)); }
}@Repository: طبقة الوصول إلى البيانات
يضع @Repository علامة على فئات DAO. ويضيف Spring ترجمة تلقائية لاستثناءات الاستمرارية: إذ تُغلَّف SQLException والاستثناءات الخاصة بالمورّد ضمن التسلسل الهرمي لـDataAccessException في Spring.
@Repository
public class JdbcUserRepository {
private final JdbcTemplate jdbc;
public JdbcUserRepository(JdbcTemplate jdbc) { this.jdbc = jdbc; }
public User findById(long id) {
return jdbc.queryForObject("SELECT * FROM users WHERE id=?",
new BeanPropertyRowMapper<>(User.class), id);
}
}@Bean في فئات @Configuration
استخدم @Bean على طريقة داخل فئة @Configuration لتسجيل Beans يدويًا — وهذا مفيد للفئات التابعة لجهات خارجية التي لا يمكنك إضافة تعليقات توضيحية إليها.
@Configuration
public class AppConfig {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper().registerModule(new JavaTimeModule());
}
@Bean
public RestTemplate restTemplate() { return new RestTemplate(); }
}فحص المكوّنات
يُفعّل @SpringBootApplication فحص المكوّنات بدءًا من حزمة التطبيق وما يتفرع منها. وتُكتشف الفئات الموجودة في الحزم الفرعية تلقائيًا. استخدم @ComponentScan(basePackages=...) لتخصيص ذلك.
// Explicit scan (rarely needed in Spring Boot):
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.app", "com.example.shared"})
public class MyApp { ... }تسمية Beans
يكون اسم الـBean افتراضيًا اسم الفئة بعد تحويل حرفه الأول إلى حرف صغير (OrderService → orderService). حدّد اسمًا مخصصًا: @Service("orders") أو @Bean("myMapper").
@Service("orderSvc")
public class OrderService { ... }
// Inject by name:
@Autowired @Qualifier("orderSvc")
private OrderService svc;نطاقات Beans
النطاق الافتراضي هو singleton (مثيل واحد لكل سياق Spring). وتشمل النطاقات الأخرى: prototype (مثيل جديد لكل عملية حقن)، وrequest، وsession (للويب فقط).
@Service
@Scope("prototype")
public class ReportBuilder {
private List<String> lines = new ArrayList<>();
public void addLine(String line) { lines.add(line); }
}@Primary و@Qualifier لإزالة الالتباس
عندما تنفّذ عدة Beans الواجهة نفسها، استخدم @Primary لتحديد الـBean الافتراضي، أو استخدم @Qualifier("name") عند نقطة الحقن لاختيار Bean محدد.
@Service @Primary
public class CacheUserService implements UserService { ... }
@Service
public class DbUserService implements UserService { ... }
// Inject specific one:
@Autowired @Qualifier("dbUserService")
private UserService userService;التهيئة الكسولة
تُنشأ Beans من نوع singleton عند بدء التشغيل افتراضيًا. أضف التعليق التوضيحي @Lazy لتأجيل إنشائها حتى أول استخدام — وهذا مفيد للـBeans المكلفة التي نادرًا ما تُستخدم.
@Service @Lazy
public class HeavyReportService {
public HeavyReportService() { System.out.println("Created on first use"); }
}@PostConstruct و@PreDestroy
شغّل منطق التهيئة بعد حقن التبعيات باستخدام @PostConstruct. ونظّف الموارد قبل إتلاف الـBean باستخدام @PreDestroy.
@Service
public class CacheService {
@PostConstruct
public void init() { System.out.println("Cache warming up..."); }
@PreDestroy
public void cleanup() { System.out.println("Cache cleared."); }
}فحص سريع
ما السلوك الإضافي الذي يضيفه @Repository مقارنةً بـ@Component؟
مراجعة
استخدم @Service لمنطق الأعمال، و@Repository لـDAO، و@Component للأدوات المساعدة، و@Bean للأنواع التابعة لجهات خارجية. يحل @Primary/@Qualifier مشكلة تعدد Beans. واستخدم @PostConstruct/@PreDestroy لخطافات دورة الحياة.
تعلم Java مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 104
- الدروس
- 374
الأسئلة الشائعة
هل درس «توصيل الـ beans: @Component و@Service و@Repository» مجاني؟
نعم — نص درس «توصيل الـ beans: @Component و@Service و@Repository» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.
ماذا ستتعلم في «توصيل الـ beans: @Component و@Service و@Repository»؟
استخدم تعليقات التصنيف النمطية، وعرّف beans باستخدام @Bean، وافهم فحص المكوّنات تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «توصيل الـ beans: @Component و@Service و@Repository»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التهيئة التلقائية وSpring Boot Starters
- خصائص التطبيق وملفات التعريف
- توصيل الـ beans: @Component و@Service و@Repository
- الحقن عبر المُنشئ والتبعيات الدائرية