বসন্তে প্রারম্ভিককরণ প্রক্রিয়াটি বন্ধ করার বিভিন্ন উপায় রয়েছে। যদি আপনাকে সমস্ত মটরশুটি শুরু করতে হয় এবং সেগুলি স্বতঃশক্তি / ইনজেকশন দিতে হয় তবে কমপক্ষে দুটি উপায় আছে যা আমি জানি এটি এটি নিশ্চিত করবে। আমি কেবল দ্বিতীয়টি পরীক্ষা করেছি তবে আমি উভয়কেই একইভাবে কাজ করতে পারি।
আপনি যদি @ বিয়ান ব্যবহার করছেন তবে আপনি initMethod এর মাধ্যমে রেফারেন্স করতে পারেন।
@Configuration
public class BeanConfiguration {
@Bean(initMethod="init")
public BeanA beanA() {
return new BeanA();
}
}
public class BeanA {
// method to be initialized after context is ready
public void init() {
}
}
আপনি যদি @ সংযোগকারী ব্যবহার করে থাকেন তবে আপনি এই জাতীয় @ ইভেন্টলাইস্টেনারের মাধ্যমে মন্তব্য করতে পারেন।
@Component
public class BeanB {
@EventListener
public void onApplicationEvent(ContextRefreshedEvent event) {
}
}
আমার ক্ষেত্রে আমার একটি উত্তরাধিকার ব্যবস্থা রয়েছে যেখানে আমি এখন আইওসি / ডিআই ব্যবহার করছি যেখানে স্প্রিং বুটটি চুসেন কাঠামো। পুরানো সিস্টেমটি অনেকগুলি বিজ্ঞপ্তি নির্ভরতা টেবিলের সাথে নিয়ে আসে এবং তাই আমাকে অবশ্যই সেটার-নির্ভরতা ব্যবহার করতে হবে। এটি আমাকে কিছুটা মাথা ব্যাথার কারণ যেহেতু আমি @ পোষ্টকনস্ট্রাক্টে বিশ্বাস করতে পারি নি সেহেতু সেটার দ্বারা স্বয়ংক্রিয়তা / ইনজেকশন এখনও করা হয়নি done অর্ডারটি কনস্ট্রাক্টর, @ পোষ্টকনস্ট্রাক্ট তারপরে অটোওয়্যারড সেটার। আমি এটি @ এভেন্টলিস্টনার টীকা দিয়ে সমাধান করেছি যা সর্বশেষ এবং সমস্ত মটরশুটির জন্য "একই" সময়ে চলবে। উদাহরণটি ইনিশিয়ালিংবিয়ান পাশাপাশি বাস্তবায়ন দেখায়।
একে অপরের উপর নির্ভরশীলতার সাথে আমার দুটি ক্লাস (@ কম্পোনেন্ট) রয়েছে। এই উদাহরণগুলির উদ্দেশ্যগুলির মধ্যে কেবলমাত্র তাদের মধ্যে একটি প্রদর্শন করার জন্য ক্লাসগুলি একই দেখায়।
@Component
public class BeanA implements InitializingBean {
private BeanB beanB;
public BeanA() {
log.debug("Created...");
}
@PostConstruct
private void postConstruct() {
log.debug("@PostConstruct");
}
@Autowired
public void setBeanB(BeanB beanB) {
log.debug("@Autowired beanB");
this.beanB = beanB;
}
@Override
public void afterPropertiesSet() throws Exception {
log.debug("afterPropertiesSet()");
}
@EventListener
public void onApplicationEvent(ContextRefreshedEvent event) {
log.debug("@EventListener");
}
}
কনটেইনারটি শুরু হওয়ার পরে এটি কলগুলির ক্রমানুসারে লগ আউটপুট।
2018-11-30 18:29:30.504 DEBUG 3624 --- [ main] com.example.demo.BeanA : Created...
2018-11-30 18:29:30.509 DEBUG 3624 --- [ main] com.example.demo.BeanB : Created...
2018-11-30 18:29:30.517 DEBUG 3624 --- [ main] com.example.demo.BeanB : @Autowired beanA
2018-11-30 18:29:30.518 DEBUG 3624 --- [ main] com.example.demo.BeanB : @PostConstruct
2018-11-30 18:29:30.518 DEBUG 3624 --- [ main] com.example.demo.BeanB : afterPropertiesSet()
2018-11-30 18:29:30.518 DEBUG 3624 --- [ main] com.example.demo.BeanA : @Autowired beanB
2018-11-30 18:29:30.518 DEBUG 3624 --- [ main] com.example.demo.BeanA : @PostConstruct
2018-11-30 18:29:30.518 DEBUG 3624 --- [ main] com.example.demo.BeanA : afterPropertiesSet()
2018-11-30 18:29:30.607 DEBUG 3624 --- [ main] com.example.demo.BeanA : @EventListener
2018-11-30 18:29:30.607 DEBUG 3624 --- [ main] com.example.demo.BeanB : @EventListener
আপনি দেখতে পাবেন যে সমস্ত কিছু প্রস্তুত এবং কনফিগার করার পরে @EventListener সর্বশেষে চালিত হয়।