Spring Container এর কাজের প্রক্রিয়া

Spring IoC (Inversion of Control) Container - স্প্রিং (Spring) - Java Technologies

344

স্প্রিং কনটেইনার (Spring Container) স্প্রিং ফ্রেমওয়ার্কের একটি গুরুত্বপূর্ণ অংশ যা Bean তৈরি, কনফিগার এবং ম্যানেজ করার কাজ করে। স্প্রিং কনটেইনার একাধিক Bean (অবজেক্ট) তৈরি এবং ম্যানেজ করে এবং এসব Bean এর মধ্যে ডিপেনডেন্সি ইনজেকশন করে। স্প্রিং কনটেইনারের মাধ্যমে আপনি এসি প্রকল্পের অভ্যন্তরীণ লজিক এবং অবজেক্টগুলিকে সহজেই ম্যানেজ করতে পারেন, যা ডিপেনডেন্সি ইনজেকশন (DI) এবং অ্যাস্পেক্ট ওরিয়েন্টেড প্রোগ্রামিং (AOP) এর মাধ্যমে আপনার অ্যাপ্লিকেশনকে আরো নমনীয় ও স্কেলেবল করে তোলে।

স্প্রিং কনটেইনারের কাজের প্রক্রিয়া এবং এর উপাদান সম্পর্কে বিস্তারিত জানব।


Spring Container এর কাজের প্রক্রিয়া

স্প্রিং কনটেইনারের কাজের প্রক্রিয়া হলো:

  1. Bean Creation (বিন তৈরি): স্প্রিং কনটেইনার প্রথমে সমস্ত Beans তৈরি করে, যা অ্যাপ্লিকেশনের বিভিন্ন অংশে ব্যবহৃত হবে।
  2. Dependency Injection (ডিপেনডেন্সি ইনজেকশন): কনটেইনার তৈরি হওয়া Beans এর মধ্যে নির্দিষ্ট ডিপেনডেন্সি ইনজেক্ট করে। এটি স্কোপ এবং সাইকেল ম্যানেজমেন্ট নিশ্চিত করে।
  3. Bean Configuration (বিন কনফিগারেশন): কনটেইনার তার কনফিগারেশন অনুযায়ী Beans কে কনফিগার করে। কনফিগারেশন XML বা Java-based (অথবা Annotations ব্যবহার করে) করা যেতে পারে।
  4. Bean Initialization (বিন ইনিশিয়ালাইজেশন): স্প্রিং কনটেইনার নির্দিষ্ট Bean গুলো ইনিশিয়ালাইজ করে, অর্থাৎ তারা পূর্ণ প্রস্তুত হয়ে কাজ করার জন্য প্রস্তুত হয়।
  5. Lifecycle Management (লাইফসাইকেল ম্যানেজমেন্ট): স্প্রিং কনটেইনার Beans এর লাইফসাইকেল ম্যানেজ করে। কনটেইনারের মধ্যে singleton, prototype, এবং অন্যান্য স্কোপের বিন কনফিগারেশন করা যেতে পারে।

Spring Container এর প্রধান উপাদান

স্প্রিং কনটেইনারের প্রধান দুটি উপাদান রয়েছে:

  1. BeanFactory: স্প্রিং কনটেইনারের সবচেয়ে মৌলিক উপাদান, যা Beans তৈরি এবং তাদের মধ্যে ডিপেনডেন্সি ইনজেকশন করতে ব্যবহৃত হয়। এটি মূলত getBean() মেথড দিয়ে Bean তৈরি করে এবং ম্যানেজ করে।
  2. ApplicationContext: এটি একটি উন্নত ভার্সন যা BeanFactory এর ফিচার ছাড়াও অন্যান্য ফিচার প্রদান করে যেমন ইভেন্ট হ্যান্ডলিং, ইন্টারন্যাশনালাইজেশন, এবং AOP সাপোর্ট। এটি অধিক ব্যবহৃত হয়।

BeanFactory Example:

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
MyBean myBean = (MyBean) context.getBean("myBean");

Spring Container এর কাজের ধাপ

স্প্রিং কনটেইনারের কাজের প্রক্রিয়া তিনটি প্রধান ধাপে বিভক্ত:


১. Bean Definition (বিন ডিফিনিশন)

স্প্রিং কনটেইনার প্রথমে সমস্ত Beans এর Definition তৈরি করে। এর মানে হচ্ছে যে স্প্রিং কনটেইনার জানে যে কোন ধরনের Bean তৈরি করতে হবে, সেই Bean এর নাম কী হবে, এবং কোন কনফিগারেশন ফাইলের মাধ্যমে Bean গুলি কনফিগার করতে হবে।

এটি XML কনফিগারেশন ফাইল অথবা Java Config এর মাধ্যমে করা হয়।

XML Configuration Example:

<bean id="employeeService" class="com.example.EmployeeService">
    <property name="employeeRepository" ref="employeeRepository"/>
</bean>

Java Config Example:

@Configuration
@ComponentScan("com.example")
public class AppConfig {
    @Bean
    public EmployeeService employeeService() {
        return new EmployeeService();
    }
}

২. Bean Creation (বিন তৈরি)

স্প্রিং কনটেইনার তখন Bean Creation প্রক্রিয়া শুরু করে। যখন কনটেইনার তৈরি Bean এর জন্য নির্দিষ্ট কনফিগারেশন এবং ডিপেনডেন্সি ইনজেকশন করে, তখন এটি একটি অবজেক্ট তৈরি করে এবং সেই অবজেক্টকে কনটেইনারে নিবন্ধিত করে।

Singleton Scope Beans সাধারণত একটি সিঙ্গেল ইনস্ট্যান্স তৈরি করে এবং অ্যাপ্লিকেশন চলাকালীন সেটি ব্যবহার করা হয়।

@Service
public class EmployeeService {
    @Autowired
    private EmployeeRepository employeeRepository;
}

এখানে, EmployeeService একটি Bean হিসাবে কনটেইনারে নিবন্ধিত হবে এবং EmployeeRepository এর ডিপেনডেন্সি ইনজেকশন হবে।


৩. Dependency Injection (ডিপেনডেন্সি ইনজেকশন)

স্প্রিং কনটেইনার Dependency Injection (DI) প্যাটার্ন অনুসরণ করে, যেখানে একটি Bean এর ডিপেনডেন্সি স্বয়ংক্রিয়ভাবে ইনজেক্ট করা হয়। স্প্রিং মূলত তিনটি পদ্ধতিতে DI পরিচালনা করে:

  1. Constructor Injection: ডিপেনডেন্সি কনস্ট্রাক্টরের মাধ্যমে ইনজেক্ট করা হয়।

    @Component
    public class EmployeeService {
        private final EmployeeRepository employeeRepository;
    
        @Autowired
        public EmployeeService(EmployeeRepository employeeRepository) {
            this.employeeRepository = employeeRepository;
        }
    }
    
  2. Setter Injection: ডিপেনডেন্সি সেটার মেথডের মাধ্যমে ইনজেক্ট করা হয়।

    @Component
    public class EmployeeService {
        private EmployeeRepository employeeRepository;
    
        @Autowired
        public void setEmployeeRepository(EmployeeRepository employeeRepository) {
            this.employeeRepository = employeeRepository;
        }
    }
    
  3. Field Injection: ডিপেনডেন্সি সরাসরি ফিল্ডে ইনজেক্ট করা হয় (যা অনেকটা সহজ এবং কম ব্যবহৃত পদ্ধতি)।

    @Component
    public class EmployeeService {
        @Autowired
        private EmployeeRepository employeeRepository;
    }
    

৪. Bean Initialization (বিন ইনিশিয়ালাইজেশন)

স্প্রিং কনটেইনার যখন Beans তৈরি এবং ডিপেনডেন্সি ইনজেকশন শেষ করে, তখন Bean Initialization শুরু হয়। স্প্রিং কনটেইনার তখন @PostConstruct অ্যানোটেশন বা InitializingBean ইন্টারফেস ব্যবহার করে Beans কে ইনিশিয়ালাইজ করে।

@Component
public class EmployeeService {

    @PostConstruct
    public void init() {
        System.out.println("EmployeeService initialized");
    }
}

৫. Bean Destruction (বিন ডেস্ট্রাকশন)

অ্যাপ্লিকেশন বন্ধ হওয়ার পর স্প্রিং কনটেইনার Beans এর Destruction পরিচালনা করে। যদি কোনও Bean @PreDestroy অ্যানোটেশন থাকে, তবে এটি Bean এর ডেস্ট্রাকশন প্রক্রিয়া পরিচালনা করবে। অথবা DisposableBean ইন্টারফেসও ব্যবহার করা যেতে পারে।

@Component
public class EmployeeService implements DisposableBean {

    @Override
    public void destroy() throws Exception {
        System.out.println("EmployeeService destroyed");
    }
}

সারাংশ

স্প্রিং কনটেইনার হলো একটি জটিল এবং গুরুত্বপূর্ণ উপাদান যা পুরো অ্যাপ্লিকেশনের Bean Lifecycle পরিচালনা করে। এটি Bean Creation, Dependency Injection, Bean Initialization, এবং Bean Destruction এর মতো কাজের মাধ্যমে আপনার অ্যাপ্লিকেশনের ডিপেনডেন্সি এবং অবজেক্টগুলিকে দক্ষভাবে ম্যানেজ করে। স্প্রিং কনটেইনারের মাধ্যমে অ্যাপ্লিকেশনটি আরও নমনীয়, স্কেলেবল এবং মডুলার হয়।

Content added By
Promotion

Are you sure to start over?

Loading...