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


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.