প্রসঙ্গে একাধিক প্যাকেজ: উপাদান-স্ক্যান, বসন্ত কনফিগার


185

context:component-scanউপাদানটিতে বসন্ত-সার্লেট.এক্সএমএল ফাইলটিতে আমি কীভাবে একাধিক প্যাকেজ যুক্ত করতে পারি ?

আমি চেষ্টা করেছি

<context:component-scan base-package="z.y.z.service" base-package="x.y.z.controller" />

এবং

<context:component-scan base-package="x.y.z.service, x.y.z.controller" />

এবং

<context:component-scan base-package="x.y.z.service" />
<context:component-scan base-package="x.y.z.controller" />

তবে ত্রুটি পেয়েছে:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [x.y.z.dao.daoservice.LoginDAO] found for dependency:

উত্তর:


271

নিম্নলিখিত পদ্ধতির সঠিক:

<context:component-scan base-package="x.y.z.service, x.y.z.controller" /> 

নোট করুন যে ত্রুটিটি অভিযোগ করেছে x.y.z.dao.daoservice.LoginDAO, যা উপরে উল্লিখিত প্যাকেজগুলিতে নেই, সম্ভবত আপনি এটি যুক্ত করতে ভুলে গেছেন:

<context:component-scan base-package="x.y.z.service, x.y.z.controller, x.y.z.dao" /> 

5
এই উত্তরটি সূচিত করে যে বেস-প্যাকেজটির সদস্যদের জন্য পুনরাবৃত্তি নেই তবে সেখানে রয়েছে: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 7774295/… । আমি এই পরিষ্কার করতে উত্তরটি একটু পরিবর্তন করার পরামর্শ দেব।
— djangofan

52

টিক চিহ্ন

@ComponentScan({ "x.y.z", "x.y.z.dao" })

আমাদের কী বাধ্যতামূলকভাবে নির্দিষ্ট প্যাকেজ যুক্ত করা দরকার বা আমরা কেবলমাত্র শীর্ষ স্তরের প্যাকেজটি সংজ্ঞায়িত করলে তা স্বয়ংক্রিয়ভাবে সাব প্যাকেজগুলি স্ক্যান করতে পারে?
— নিখিল সাহু

@ নিখিলসাহু না, এটি একটি পুনরাবৃত্ত স্ক্যান (স্প্রিং 3>)
— জীববিজ্ঞান.ইফো

: তাই আরও তথ্যের জন্য লিঙ্ক stackoverflow.com/questions/10794587/...
— dkb

43

আপনি একাধিক বেস প্যাকেজ যুক্ত করতে পারেন ( অ্যাক্সাভেটের উত্তর দেখুন ), তবে বেস প্যাকেজের ভিতরে যা স্ক্যান হয়েছে তা আপনি ফিল্টারও করতে পারেন :

<context:component-scan base-package="x.y.z">
   <context:include-filter type="regex" expression="(service|controller)\..*"/>
</context:component-scan>

2
@ শামস আমাকে স্যার করার দরকার নেই, তবে উত্তরটি সঠিক হলে আপনার এটি গ্রহণযোগ্য হিসাবে চিহ্নিত করা উচিত (চেকমার্কটি ক্লিক করুন)
— সান প্যাট্রিক ফ্লয়েড

1
আপনি কেন একাধিক বেস প্যাকেজ যুক্ত করতে পারবেন না? উদাহরণস্বরূপ "org.example, com.example" পছন্দ করুন?
— শেরভিন আসগরী


19
<context:component-scan base-package="x.y.z"/>

বাকি প্যাকেজগুলি "xyz" এর উপ প্যাকেজ হিসাবে কাজ করবে। সুতরাং, আপনাকে পৃথকভাবে প্রতিটি প্যাকেজ উল্লেখ করার দরকার নেই।


2
ঠিক আছে! হতে পারে এটি অন্য কারণ হতে পারে, তবে এটি কেবল পোর্টলেটগুলির জন্য স্প্রিং
— এমভিসি

@ এলক্যাড্রো অবশ্যই অন্যান্য কারণে হয়ে উঠেছে, যেহেতু এটি ভালভাবে নথিভুক্ত এবং বিজ্ঞাপনযুক্ত বৈশিষ্ট্যযুক্ত
— EIS

ঠিক আছে, আমি বিপরীতটি বলতে পারি না কারণ অনেক লোক আমাকে সংশোধন করছে। আমি আশা করি কেন এটি আমার জন্য কাজ করে না কারণ ... যাইহোক ধন্যবাদ!
— এলক্যাড্রো

এটি কি টীকা ভিত্তিক কনফিগারেশনের ক্ষেত্রেও সত্য?
— নিখিল সাহু

6

অন্য একটি সাধারণ টিকা দেখুন:

@ComponentScan(basePackages = {"x.y.z"})

2

যদি xyz সাধারণ প্যাকেজ হয় তবে আপনি ব্যবহার করতে পারেন:

<context:component-scan base-package="x.y.z.*">

এটি xyz এর সাথে শুরু হওয়া সমস্ত প্যাকেজ অন্তর্ভুক্ত করবে: xyzcontroller, xyzservice ইত্যাদি with


1

উদাহরণস্বরূপ আপনার কাছে "com.abc" প্যাকেজ রয়েছে এবং এর ভিতরে আপনার একাধিক প্যাকেজ রয়েছে, আপনি এটি ব্যবহার করতে পারেন

@ComponentScan("com.abc")

0

বিলম্বিত প্রতিক্রিয়া কিন্তু টীকাগুলি ভিত্তিক পদ্ধতির ব্যবহার করে একাধিক প্যাকেজ দেওয়ার জন্য আমরা নীচের মতো ব্যবহার করতে পারি:

@ComponentScan({"com.my.package.one","com.my.package.subpackage.two","com.your.package.supersubpackage.two"})

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.