@Autowired এবং @Resource এর মধ্যে পার্থক্য

Spring DI তে @Resource Annotation - স্প্রিং ডিপেনডেন্সি ইনজেকশন (ডিআই) (Spring Dependency Injection) - Java Technologies

315

Spring Dependency Injection (DI)-এ ব্যবহৃত দুটি গুরুত্বপূর্ণ অ্যানোটেশন হল @Autowired এবং @Resource। উভয় অ্যানোটেশনই Spring Beans-এর মধ্যে ডিপেনডেন্সি ইনজেকশন করতে ব্যবহৃত হয়, তবে তাদের ব্যবহার এবং কার্যক্রমে কিছু পার্থক্য রয়েছে।

নিচে @Autowired এবং @Resource এর মধ্যে প্রধান পার্থক্যগুলি তুলে ধরা হয়েছে:


1. @Autowired: Spring এর নিজস্ব অ্যানোটেশন

@Autowired হল Spring Framework-এর একটি অ্যানোটেশন, যা Spring Beans-এর মধ্যে ডিপেনডেন্সি ইনজেকশন করার জন্য ব্যবহৃত হয়। এটি Spring's Dependency Injection (DI) প্রক্রিয়ার অংশ এবং Spring এর নিজস্ব সমাধান।

@Autowired এর বৈশিষ্ট্য:

  • Automatic Injection: Spring Beans-এর মধ্যে ডিপেনডেন্সি ইনজেকশনের জন্য এটি নিজে থেকে মেলানো (auto-wiring) করে।
  • By Type: ডিফল্টভাবে, @Autowired টাইপের ভিত্তিতে Bean ইনজেক্ট করে। যদি একাধিক Bean একই টাইপের হয়, তবে এটি @Qualifier এর মাধ্যমে সঠিক Bean নির্বাচন করতে সাহায্য করে।
  • Required Attribute: @Autowired-এ required নামক একটি অ্যাট্রিবিউট থাকে, যার মান true (ডিফল্ট) হলে যদি ডিপেনডেন্সি মেলে না, তবে Spring একটি NoSuchBeanDefinitionException ছুড়ে দেয়। যদি false সেট করা হয়, তবে তা অপশনাল হয়ে যাবে।

উদাহরণ:

@Component
public class Car {
    
    @Autowired
    private Engine engine; // Engine Bean will be injected by type

    public void startCar() {
        engine.start();
    }
}

Required Attribute:

@Component
public class Car {

    @Autowired(required = false)
    private Engine engine; // Optional Dependency

    public void startCar() {
        if (engine != null) {
            engine.start();
        } else {
            System.out.println("Engine is not available.");
        }
    }
}

2. @Resource: Java EE অ্যানোটেশন

@Resource একটি Java EE অ্যানোটেশন (javax.annotation package) এবং এটি J2EE-এর অংশ ছিল, তবে Spring এও এটি ব্যবহার করা যেতে পারে। এটি JNDI (Java Naming and Directory Interface) রেফারেন্সিংয়ের জন্য তৈরি করা হয়েছিল, তবে Spring-এ এটি Bean ডিপেনডেন্সি ইনজেকশনের জন্য ব্যবহৃত হয়।

@Resource এর বৈশিষ্ট্য:

  • By Name: @Resource ডিফল্টভাবে Bean নামের (name) ভিত্তিতে ইনজেক্ট করে। এটি Spring-এর name অ্যাট্রিবিউটের সাথে Bean ইনজেকশন করে।
  • Supports Both By Name and By Type: যদি name অ্যাট্রিবিউট সঠিকভাবে দেওয়া না হয়, তবে by type ইনজেকশন করা হয়।
  • No required Attribute: @Resource অ্যানোটেশনে required অ্যাট্রিবিউট থাকে না, তবে Bean না পাওয়া গেলে NullPointerException হতে পারে।

উদাহরণ:

@Component
public class Car {
    
    @Resource(name = "engine")  // The "engine" bean will be injected by name
    private Engine engine;

    public void startCar() {
        engine.start();
    }
}

যদি @Resource ব্যবহার করা হয় এবং যদি name অ্যাট্রিবিউট না দেওয়া হয়, তবে Spring Bean টাইপের সাথে মেলে এমন Bean ইনজেক্ট করবে।


3. মূল পার্থক্য

বৈশিষ্ট্য@Autowired@Resource
টাইপ/নাম অনুযায়ী ইনজেকশনডিফল্টভাবে টাইপ অনুযায়ী ইনজেকশন হয়ডিফল্টভাবে নাম অনুযায়ী ইনজেকশন হয়
JNDI সমর্থননাহ্যাঁ, JNDI রেফারেন্সিং সমর্থন করে
required অ্যাট্রিবিউটrequired অ্যাট্রিবিউট রয়েছে (যা অপশনাল হতে পারে)required অ্যাট্রিবিউট থাকে না
কোডে ব্যবহারSpring specific (Spring DI)Java EE-specific, Spring এও ব্যবহার করা যায়
Bean নামের ভিত্তিতে ইনজেকশননাহ্যাঁ (যদি name অ্যাট্রিবিউট ব্যবহার করা হয়)
ফিল্ড বা স্যাটার ইনজেকশনব্যবহারযোগ্যব্যবহারযোগ্য

সারাংশ

  • @Autowired একটি Spring-specific অ্যানোটেশন যা by type ডিপেনডেন্সি ইনজেকশন করে, এবং এটি required অ্যাট্রিবিউট ব্যবহার করে Bean প্রয়োজনীয়তা নির্ধারণ করতে সাহায্য করে।
  • @Resource একটি Java EE অ্যানোটেশন যা মূলত by name ডিপেনডেন্সি ইনজেকশন করে এবং Spring এ এর মাধ্যমে by type বা by name ডিপেনডেন্সি ইনজেকশন করা সম্ভব।

যেহেতু Spring DI-এ @Autowired অধিক ব্যবহৃত, তা Spring এর নিজস্ব সমাধান হিসেবে কাজ করে। তবে, @Resource Java EE-এর অংশ হওয়ায় এটি কিছু ক্ষেত্রে ব্যবহার হতে পারে যেখানে Java EE এর অন্যান্য কনফিগারেশন সহ Spring ব্যবহার করা হয়।

Content added By
Promotion

Are you sure to start over?

Loading...