වසන්ත රාමුව කරන්නේ කුමක්ද? මම එය භාවිතා කළ යුතුද? ඇයි හෝ නැත්තේ ඇයි?


245

ඉතින්, මම ජාවා හි නවතම ව්‍යාපෘතියක් ආරම්භ කරන අතර, වසන්තය භාවිතා කිරීමට සලකා බලමි. මම වසන්තය ගැන සලකා බලන්නේ ඇයි? මොකද ගොඩක් අය මට කියනවා මම වසන්තය පාවිච්චි කළ යුතුයි කියලා! බරපතල ලෙස, මම වසන්තය යනු කුමක්ද යන්න හෝ එය කරන්නේ කුමක්ද යන්න පැහැදිලි කිරීමට මිනිසුන්ව පොළඹවා ගැනීමට උත්සාහ කළ ඕනෑම වේලාවක ඔවුන්ට කිසි විටෙක මට සෘජු පිළිතුරක් දිය නොහැක. මම ස්ප්‍රින්ග්සෝර්ස් අඩවියේ හඳුන්වාදීම් පරීක්ෂා කර ඇත්තෙමි, ඒවා සැබවින්ම සංකීර්ණ හෝ සැබවින්ම නිබන්ධනය කේන්ද්‍රගත වී ඇති අතර, ඒ කිසිවක් මා එය භාවිතා කළ යුත්තේ ඇයිද යන්න හෝ එය මගේ ජීවිතය පහසු කරන්නේ කෙසේද යන්න පිළිබඳ හොඳ අදහසක් ලබා නොදේ. සමහර විට මිනිසුන් "යැපුම් එන්නත් කිරීම" යන යෙදුම වටා විසි කරයි, එය මා තව තවත් ව්‍යාකූල කරයි, මන්ද එම යෙදුමේ තේරුම පිළිබඳව මට වෙනස් අවබෝධයක් ඇතැයි මම සිතමි.

කෙසේ වෙතත්, මෙන්න මගේ පසුබිම සහ මගේ යෙදුම ගැන ටිකක්:

පසුකාලීන වෙබ් සංවර්ධනයක් කරමින් ජාවා හි ටික කලක් සංවර්ධනය වෙමින් පවතී. ඔව්, මම ටොන් ගණනක් ඒකක පරීක්ෂණ කරනවා. මෙය පහසු කිරීම සඳහා, මම සාමාන්‍යයෙන් ක්‍රමයක අනුවාද දෙකක් (අවම වශයෙන්) සාදමි: එකක් නිදර්ශන විචල්‍යයන් භාවිතා කරන අතර ක්‍රමයට සම්ප්‍රේෂණය වන විචල්‍යයන් පමණක් භාවිතා කරයි. නිදර්ශන විචල්‍යයන් භාවිතා කරන තැනැත්තා අනෙකා අමතයි, නිදර්ශන විචල්‍යයන් සපයයි. ඒකක පරීක්‍ෂණයට කාලය පැමිණි විට, මම මොකිටෝ භාවිතා කරන්නේ වස්තූන් සමච්චලයට ලක් කර පසුව විචල්‍යයන් භාවිතා නොකරන ක්‍රමයට ඇමතුම් ලබා ගනිමිනි. "පරායත්ත එන්නත් කිරීම" ලෙස මම නිතරම තේරුම් ගෙන ඇත්තේ මෙයයි.

CS දෘෂ්ටි කෝණයකින් මගේ යෙදුම ඉතා සරල ය. කුඩා ව්යාපෘතියක්, ආරම්භ කිරීමට 1-2 සංවර්ධකයින්. සෙවුම් පොකුරක් සහිත බොහෝ විට CRUD වර්ගයේ මෙහෙයුම්. මූලික වශයෙන් RESTful වෙබ් සේවා සමූහයක්, සහ වෙබ් ඉදිරිපස අන්තයක් සහ අවසානයේ සමහර ජංගම සේවාදායකයින්. මම සිතන්නේ ඉදිරිපස කෙළවර කෙළින්ම HTML / CSS / JS / JQuery වලින් කිරීමටයි, එබැවින් JSP භාවිතා කිරීමට සැබෑ සැලසුමක් නොමැත. වෙබ් සේවා ක්‍රියාත්මක කිරීම සඳහා හයිබර්නේට් ORM ලෙස භාවිතා කිරීම සහ ජර්සි.

මම දැනටමත් කේතීකරණය ආරම්භ කර ඇති අතර, මට සාප්පු යෑමට සහ ඕනෑම කෙනෙකුට ආයෝජනය කිරීමට අවශ්‍ය දැයි බැලීමට හැකි නිරූපණයක් ලබා ගැනීමට මම ඉතා උනන්දුවෙන් සිටිමි. එබැවින් පැහැදිලිවම කාලය යනු සාරයයි. වසන්තය සතුව ඉගෙනීමේ වක්‍රය ඇති බව මට වැටහී ඇති අතර, එය සමස්ත XML වින්‍යාසයක් අවශ්‍ය බව පෙනේ, මම සාමාන්‍යයෙන් වසංගතය මෙන් වළක්වා ගැනීමට උත්සාහ කරමි. නමුත් එය මගේ ජීවිතය පහසු කර ගත හැකි නම් සහ (විශේෂයෙන්) එය සංවර්ධනය හා පරීක්ෂාව වේගවත් කළ හැකි නම්, මම උණ්ඩය සපාගෙන වසන්තය ඉගෙන ගැනීමට කැමැත්තෙමි.

ඉතින් කරුණාකර. මට උගන්වන්න. මම වසන්තය භාවිතා කළ යුතුද? ඇයි හෝ නැත්තේ ඇයි?


12
ඔබ කැමතිද සහ එය ඔබේ ව්‍යාපෘතියට සුදුසු දැයි බැලීමට ඔබ ටික වේලාවක් එය අත්හදා බැලිය යුතු යැයි මම සිතමි. පුද්ගලිකව මම එයට වෛර කරමි.
රිචඩ්

1
ඔබට XML හෝ විවරණ භාවිතා කළ හැකි අතර; වසන්තය වින්‍යාස කිරීමේ මානසිකත්වය පිළිබඳ සම්මුතියක් ගන්නා බව මතක තබා ගන්න. එය අවශ්යයෙන්ම ඔබ භාණ්ඩ පිරික්සුම් ලැයිස්තුවක් නොවේ ඇති ලිපිනයට.
ආරොන් මැකිවර්

15
මෙම ප්‍රශ්නය තරමක් පුළුල් බව සත්‍යයක් වුවත්, එය විවෘතව පැවතිය යුතු යැයි මම සිතමි. මම එය කියවූයේ "මධ්‍යම ප්‍රමාණයේ ව්‍යාපෘතියක් සඳහා වසන්තය ලබා දෙන ප්‍රතිලාභ මොනවාද?", එය හොඳ ප්‍රශ්නයකි.
sleske

1
මගේ ප්‍රියතම තාක්ෂණික පොත කියවීමට මම තරයේ නිර්දේශ කරමි: ස්ප්‍රිං ඉන් ඇක්ෂන්, ක්‍රේග් වෝල්ස්ගේ තෙවන සංස්කරණය. එය හොඳ කියවීමක් වන අතර ඔබ වැඩසටහන් කරන ආකාරය වෙනස් කරනු ඇත.
ඇල්ෆ්‍රඩේ

4
ව්යවසාය ජාවා සලකා බැලීමේදී, වසන්තය නොකරන දේට පිළිතුරු දීම පහසුය ...
m3th0dman

Answers:


113

වසන්ත රාමුව කරන්නේ කුමක්ද? මම එය භාවිතා කළ යුතුද? ඇයි හෝ නැත්තේ ඇයි?

වසන්තය යනු විවිධ කොටස් එකට "කම්බි" කිරීමට ඔබට උපකාරී වන රාමුවකි. ඔබට බොහෝ සංරචක ඇති අවස්ථාවන්හිදී එය වඩාත් ප්‍රයෝජනවත් වන අතර ඒවා විවිධ ආකාරවලින් ඒකාබද්ධ කිරීමට ඔබ තීරණය කළ හැකිය, නැතහොත් විවිධ සැකසුම් හෝ පරිසරය මත පදනම්ව එක් සංරචකයක් තවත් සංරචකයක් සඳහා පහසුවෙන් මාරු කර ගැනීමට කැමති විය හැකිය.

"පරායත්ත එන්නත් කිරීම" ලෙස මම නිතරම තේරුම් ගෙන ඇත්තේ මෙයයි.

මම වෙනස් අර්ථ දැක්වීමක් යෝජනා කරමි:

"ඔබේ වස්තූන් සැලසුම් කරන්න එවිට ඔවුන්ට අවශ්‍ය දේ සැපයීමට බාහිර බලවේගයක් මත යැපෙන අතර, ඔවුන්ගේ සුපුරුදු රැකියාවන් ආරම්භ කිරීමට කිසිවෙකුගෙන් ඉල්ලා සිටීමට පෙර මෙම පරායත්තතා සෑම විටම එන්නත් කරනු ලැබේ ."

එය සසඳා බලන්න: "සෑම වස්තුවක්ම පිටතට ගොස් සෑම දෙයක්ම සොයා ගැනීමට වගකිව යුතු අතර එය ආරම්භ වන විට අවශ්‍ය සෑම කෙනෙකුම."

එය සම්පූර්ණ XML වින්‍යාසයක් අවශ්‍ය බව පෙනේ

හොඳයි, බොහෝ XML (හෝ ව්‍යාඛ්‍යාව මත පදනම් වූ) දේවල් වසන්ත දේවල් වැනි ය:

  • කවුරුහරි "හැම්මර්ස්ටෝර්" ඉල්ලූ විට, මට අවශ්‍ය වන්නේ ඔබ එය නිර්මාණය කර example.HammerStoreඑය ආපසු ලබා දීමයි . එක් වෙළඳසැලක් පමණක් තිබිය යුතු බැවින් ඊළඟ වතාවට නිදසුන හැඹිලිය.
  • කවුරුහරි "සමහමර්" ඉල්ලූ විට, ඔබ විසින්ම "හැම්මර්ස්ටෝර්" එකක් ඉල්ලා සිටිමින් ගබඩාවේ ක්‍රමයේ ප්‍රති result ලය ලබා දෙන්න makeHammer(). එපා නොවන මෙම ප්රතිඵලය වරුන්.
  • කවුරුහරි "සමර් රෙන්ච්" ඉල්ලූ විට, ඔබට අවශ්‍ය වන්නේ example.WrenchImpl, වින්‍යාස සැකසුම භාවිතා gaugeAmountකර එය නිදර්ශන setWrenchSize()දේපල තුළට දැමීමයි . ප්රති result ලය හැඹිලි නොකරන්න.
  • කවුරුහරි "LocalPlumber" ඉල්ලූ විට, මම ඔබට උදාහරණයක් නිර්මාණය කිරීමට කැමැත්තෙමි example.PlumberImpl. "පේද්‍රෝ" setName()නූල එහි setHammer()ක්‍රමයට දමන්න, එහි ක්‍රමයට "සොම්හැම්මර්" එකක් දමා එහි setWrench()ක්‍රමයට "සොම්ව්‍රෙන්ච්" එකක් දමන්න . අපට අවශ්‍ය වන්නේ එක් ජලනල කාර්මික ශිල්පියෙකු පමණක් බැවින් ප්‍රති result ලය නැවත ලබා දෙන්න.

මේ ආකාරයට, වසන්තය මඟින් ඔබේ සම්බන්ධක සංරචක, ඒවා ලේබල් කිරීම, ඔවුන්ගේ ජීවන චක්‍ර / හැඹිලි පාලනය කිරීම සහ වින්‍යාසය මත පදනම්ව හැසිරීම වෙනස් කිරීමට ඉඩ දෙයි.

[පරීක්ෂා කිරීම] පහසු කිරීම සඳහා මම සාමාන්‍යයෙන් ක්‍රමයක අනුවාද දෙකක් (අවම වශයෙන්) සාදමි: උදාහරණ විචල්‍යයන් භාවිතා කරන එකක් සහ ක්‍රමයට සම්ප්‍රේෂණය වන විචල්‍යයන් පමණක් භාවිතා කරන.

එය මට විශාල ප්‍රතිලාභයක් නොලැබීම සඳහා විශාල කාර්යයක් සේ පෙනේ. ඒ වෙනුවට, ඔබේ නිදර්ශන විචල්‍යයන් protectedහෝ ඇසුරුම් දෘශ්‍යතාවයක් ඇති කර එකම com.mycompany.whateverපැකේජයක් තුළ ඒකක පරීක්ෂණ සොයා ගන්න . එමඟින් ඔබට පරීක්‍ෂා කිරීමේදී අවශ්‍ය විටෙක නිදර්ශන විචල්‍යයන් පරීක්ෂා කර වෙනස් කළ හැකිය.


69

පළමුව, පරායත්ත එන්නත් කිරීම යනු කුමක්ද?

සරල. ඔබට පංතියක් ඇත, එයට පුද්ගලික ක්ෂේත්‍රයක් ඇත (ශුන්‍ය ලෙස සකසා ඇත) සහ ඔබ එම ක්ෂේත්‍රය සඳහා වටිනාකම සපයන පොදු කට්ටලයක් ප්‍රකාශ කරයි. වෙනත් වචන වලින් කිවහොත්, පන්තියේ පරාසය (ක්ෂේත්‍රය) බාහිර පන්තියක් විසින් එන්නත් කරනු ලැබේ (සැකසුම හරහා). ඒක තමයි. කිසිවක් ඉන්ද්‍රජාලික නොවේ.

දෙවනුව, වසන්තය XML නොමැතිව භාවිතා කළ හැකිය (හෝ ඉතා සුළු)

ඔබ 3.0.5.GA හෝ ඊට වැඩි වසන්තය සමඟ කිමිදුනහොත් ඔබට JDK6 + වෙතින් යැපුම් එන්නත් කිරීමේ සහාය භාවිතා කළ හැකිය. මෙයින් අදහස් කරන්නේ ඔබට @Componentසහ @Resourceවිවරණ භාවිතා කරමින් පරායත්තතාවයන් රැහැන් ගත හැකි බවයි.

වසන්තය කිසිසේත් භාවිතා කරන්නේ ඇයි?

නිසැකවම, ඔබගේ සියලු පංතිවල වැදගත් පරායත්තතාවයන් සඳහා සැකසුම් ඇති බැවින් පරායත්ත එන්නත් කිරීම ඉතා පහසු ඒකක පරීක්ෂණයක් ප්‍රවර්ධනය කරයි. අවශ්‍ය හැසිරීම සැපයීම සඳහා ඔබේ ප්‍රියතම විහිළු රාමුව භාවිතයෙන් මේවා පහසුවෙන් සමච්චල් කළ හැකිය.

ඒ හැරුණු විට, JEE සම්මත තාක්ෂණයන් සමඟ වැඩ කිරීම සඳහා මූලික පන්ති ලෙස ක්‍රියා කරන සැකිලි රාශියක් වසන්තය සපයයි. උදාහරණයක් ලෙස, JdbcTemplate JDBC සමඟ හොඳින් ක්‍රියා කරයි, JpaTemplate JPA සමඟ හොඳ දේ කරයි, JmsTemplate JMS සෑහෙන තරම් සරල කරයි. රෙස්ට් ටෙම්ප්ලේට් එක සරලයි. උදාහරණයක් වශයෙන්:

RestTemplate restTemplate = new RestTemplate();
MyJaxbObject o = restTemplate.getForObject("https://secure.example.org/results/{param1}?param2={param2}",MyJaxbObject.class,"1","2");

ඔබ ඉවරයි. පරාමිතීන් එන්නත් කර ඇති අතර ඔබට අවශ්‍ය වන්නේ MyJaxbObject සඳහා JAXB විවරණ සැපයීමයි. ඔබ මාවන් JAXB ප්ලගිනය භාවිතා කර XSD වෙතින් ස්වයංක්‍රීයව ජනනය කර ඇත්නම් ඒ සඳහා කිසිසේත් ගත නොවනු ඇත. එහි කිසිදු වාත්තු කිරීමක් සිදු නොවූ බවත්, මාර්ෂලර්වරයකු ප්‍රකාශයට පත් කිරීමේ අවශ්‍යතාවක් නොමැති බවත් සලකන්න. ඒ සියල්ල ඔබ වෙනුවෙන් කර ඇත.

වසන්තයේ අරුමපුදුම දේ ගැන මට සදහටම දැනෙන්නට පුළුවන, නමුත් සමහර විට කළ හැකි හොඳම දෙය නම් සරල කේත ස්පයික් එකක් අත්හදා බැලීමයි. එහිදී ඔබ ගනුදෙනු සඳහා සහාය වන එන්නත් කරන ලද DAO වෙතින් දත්ත පොම්ප කිරීම සඳහා RESTful වෙබ් සේවාවක් රැහැන් කිරීමට උත්සාහ කරයි.


4
ඔව් RestTemplate එක නම් නියමයි. මට පේළි 100 ක් වැනි කේතයක් ඇති අතර එය විසි කර පේළි 2-3 ක් ආදේශ කළ හැකිය.
කෙවින්

11
නිට්පික් කිරීමට: යැපුම් එන්නත් කිරීම සඳහා ඉදිකිරීම්කරු පදනම් කරගත් ප්‍රවේශය ද ඇතුළත් වේ. ඔබට අවශ්‍යයෙන්ම සැකසුම් අවශ්‍ය නොවේ.
ඩැරියන්

29

පළමුවෙන්ම, යැපුම් එන්නත් කිරීම පිළිබඳ ඔබේ අවබෝධය මූලික වශයෙන් වැරදියි, නමුත් බොහෝ අය මෙම පදය භාවිතා කරන විට අදහස් කරන දෙයට වඩා බෙහෙවින් වෙනස් ය. ඔබ විස්තර කරන්නේ පරීක්ෂණ හැකියාව ලබා ගැනීම සඳහා තරමක් අමුතු හා සාම්ප්‍රදායික නොවන ක්‍රමයකි. වෙනත් සංවර්ධකයින් ඒ ආකාරයේ කේතයන්ගෙන් ව්‍යාකූල වන බැවින් එයින් ඉවත් වන ලෙස මම ඔබට උපදෙස් දෙමි.

පරායත්ත එන්නත් කිරීම සාමාන්‍යයෙන් වටහාගෙන ඇති පරිදි (සහ වසන්තය විසින් ක්‍රියාත්මක කරනු ලැබේ) යන්නෙන් අදහස් කරන්නේ පන්තියකට ඇති පරායත්තතාවයන් (උදා: ජේඩීබීසී දත්ත ප්‍රභවයක්) පන්තිය විසින්ම ලබා නොගන්නා නමුත් උදාහරණය නිර්මාණය කරන විට බහාලුමක් මඟින් "එන්නත් කරනු ලැබේ" යන්නයි. එබැවින් දත්ත ප්‍රභවය භාවිතා කරන සෑම ක්‍රමයකම අනුවාද දෙකක් ඔබ සතුව නොමැත; ඒ වෙනුවට, ඔබට “තාත්වික” දත්ත ප්‍රභවය එන්නත් කරන ලද හා විහිළුවක් එන්නත් කරන ලද එක් පරායත්ත එන්නත් වින්‍යාසයක් ඇත. නැතහොත්, එන්නත් කිරීම සිදු කරන්නේ ඉදිකිරීම්කරු හෝ ලබා ගන්නෙකු හරහා නම්, පරීක්ෂණ කේතයට එන්නත පැහැදිලිව කළ හැකිය.

දෙවනුව, වසන්තය යනු එහි මූලික ක්‍රියාකාරිත්වය වුවද පරායත්ත එන්නත් කිරීම පමණක් නොවේ. එය ඔබට අවශ්‍ය විය හැකි ප්‍රකාශන ගනුදෙනු, රැකියා උපලේඛනගත කිරීම, සත්‍යාපනය සහ වෙනත් ක්‍රියාකාරිත්වයන් රාශියක් (පූර්ණ MVC වෙබ් රාමුවක් ඇතුළුව) සපයයි. එකම ක්‍රියාකාරීත්වයක් සපයන වෙනත් රාමු ඇත, නමුත් වසන්තය හැරුණු විට, ජාවා ඊඊ පමණක් ඒවා සියල්ලම ඒකාබද්ධ කර ඇත.


OP ඩීඅයි හොඳින් වටහාගෙන ඇත
බැසිලෙව්ස්

19

ඔබට වසන්තය භාවිතා කිරීමට අවශ්‍ය ඇයි, ඔබට එය http://www.wrox.com/WileyCDA/Section/Why-Use-the-Spring-Framework-.id-130098.html හි කියවිය හැකිය.

සාරාංශයකින් :

  • J2EE යෙදුම්වල “ජලනල” කේතයේ අධික ප්‍රමාණයක් අඩංගු වේ. බොහෝ කේත සමාලෝචන මඟින් කිසිවක් නොකරන කේතයේ ඉහළ ප්‍රතිශතයක් නැවත නැවතත් හෙළි කරයි: ජේඑන්ඩීඅයි විමසුම් කේතය, වස්තු මාරු කිරීම, ජේඩීබීසී සම්පත් ලබා ගැනීමට සහ මුදා හැරීමට බ්ලොක් උත්සාහ කරන්න / අල්ලා ගන්න. . . . එවැනි ජලනල කේත ලිවීම හා නඩත්තු කිරීම යෙදුමේ ව්‍යාපාරික වසම කෙරෙහි අවධානය යොමු කළ යුතු සම්පත් කෙරෙහි විශාල බලපෑමක් ඇති කරයි.

  • බොහෝ J2EE යෙදුම් මෙය නුසුදුසු තැනක බෙදා හරින ලද වස්තු ආකෘතියක් භාවිතා කරයි. මෙය අධික කේත සහ කේත අනුපිටපත් කිරීමට ප්‍රධාන හේතුවකි. එය බොහෝ අවස්ථාවන්හි සංකල්පමය වශයෙන් ද වැරදිය. අභ්‍යන්තරව බෙදා හරින ලද යෙදුම් සම-පිහිටුවා ඇති යෙදුම් වලට වඩා සංකීර්ණ වන අතර බොහෝ විට අඩු ක්‍රියාකාරී වේ. ඇත්ත වශයෙන්ම, ඔබේ ව්‍යාපාර අවශ්‍යතා මඟින් බෙදා හරින ලද ගෘහ නිර්මාණ ශිල්පයක් නියම කරන්නේ නම්, ඔබ විසින් බෙදා හරින ලද ගෘහ නිර්මාණ ශිල්පයක් ක්‍රියාත්මක කළ යුතු අතර, එයින් සිදුවන වෙළඳාම පිළිගැනීම අවශ්‍ය වේ (සහ වසන්තය එවැනි අවස්ථාවන්ට උපකාර කිරීම සඳහා විශේෂාංග සපයයි). නමුත් බලවත් හේතුවක් නොමැතිව ඔබ එසේ නොකළ යුතුය.

  • EJB සංරචක ආකෘතිය අනවශ්‍ය ලෙස සංකීර්ණයි. J2EE යෙදුම්වල ව්‍යාපාර තර්කනය ක්‍රියාත්මක කිරීමේදී සංකීර්ණත්වය අඩු කිරීමේ ක්‍රමයක් ලෙස EJB සංකල්පනය කරන ලදි; එය ප්‍රායෝගිකව මෙම ඉලක්කය සපුරා නැත.

  • EJB අධික ලෙස භාවිතා වේ. EJB මූලිකවම නිර්මාණය කර ඇත්තේ අභ්‍යන්තරව බෙදා හරින ලද, ගනුදෙනු කිරීමේ යෙදුම් සඳහා ය. සුළු නොවන යෙදුම් සියල්ලම පාහේ ගනුදෙනුකාරී වන නමුත් බෙදා හැරීම මූලික සංරචක ආකෘතියට ගොඩනගා නොගත යුතුය.

  • බොහෝ "J2EE සැලසුම් රටා" ඇත්ත වශයෙන්ම සැලසුම් රටා නොව තාක්‍ෂණික සීමාවන් සඳහා වන ක්‍රියාමාර්ග වේ. බෙදා හැරීම අධික ලෙස භාවිතා කිරීම සහ ඊජේබී වැනි සංකීර්ණ ඒපීඅයි භාවිතා කිරීම සැක සහිත නිර්මාණ රටා රාශියක් ජනනය කර ඇත; මේවා විවේචනාත්මකව විමසා බලා සරල, වඩා tive ලදායී, ප්‍රවේශයන් සොයා බැලීම වැදගත් ය.

  • J2EE යෙදුම් ඒකක පරීක්ෂණයට අපහසුය. කඩිනම් චලනය ආරම්භ වීමට පෙර J2EE API සහ විශේෂයෙන් EJB සංරචක ආකෘතිය අර්ථ දක්වා ඇත. මේ අනුව ඔවුන්ගේ සැලසුම ඒකක පරීක්ෂණයේ පහසුව සැලකිල්ලට නොගනී. ඒපීඅයි සහ ව්‍යංග කොන්ත්‍රාත්තු දෙකෙන්ම, යෙදුම් සේවාදායකයෙන් පිටත ඊජේබී සහ තවත් බොහෝ ජේ 2 ඊපී ඒපීඅයි මත පදනම්ව යෙදුම් පරීක්ෂා කිරීම පුදුම සහගතය. ඉහළ පරීක්ෂණ ආවරණයක් ලබා ගැනීමට සහ දත්ත සමුදායකට සම්බන්ධතාවය නැතිවීම වැනි බොහෝ අසාර්ථක අවස්ථා ප්‍රතිනිෂ්පාදනය කිරීමට යෙදුම් සේවාදායකයෙන් පිටත ඒකක පරීක්ෂණ අත්‍යවශ්‍ය වේ. සංවර්ධන හෝ නඩත්තු ක්‍රියාවලියේදී පරීක්ෂණ ඉක්මනින් ක්‍රියාත්මක කළ හැකි බව සහතික කිරීම, නැවත සේවයේ යෙදවීම සඳහා බලා සිටින ro ලදායී කාලය අවම කිරීම ද වැදගත් ය.

  • සමහර J2EE තාක්ෂණයන් අසාර්ථක වී ඇත. මෙහි ප්‍රධාන වැරදිකරු වන්නේ බෝංචි බෝංචි වන අතර ඒවා produc ලදායිතාවයට හා වස්තු දිශානතියට ඇති බාධාවන්ට වඩා අඩුවෙන් ඔප්පු කර ඇත.


14

මූලික ජාවා, සර්වට්ලට් සහ ජේඑස්පී, HTML සහ එක්ස්එම්එල්, ජේඩීබීසී ඒපීඅයි භාවිතා කරමින් අපි සරල, කාර්යක්ෂම, වේගවත් යෙදුම් සහ වෙබ් සේවා ලිවීමට පුරුදුව සිටියෙමු. එය ප්‍රමාණවත් විය; JUnit පරීක්ෂා කිරීමට හොඳ මෙවලමක් විය. අපගේ කේතය ක්‍රියාත්මක වන පරිදි අපි පහසුවෙන් විවේක ගත්තෙමු.

හයිබර්නේට් පැමිණියේ SQL සරල කිරීම සහ ජාවා වස්තූන් සමඟ දත්ත සමුදා වගු සත්‍ය ලෙස සිතියම් ගත කිරීම සඳහා වන අතර, ධූරාවලි සම්බන්ධතා වස්තු සම්බන්ධතා සිතියම්කරණය හෝ ORM මගින් පිළිබිඹු කිරීමට ඉඩ සලසයි. මම එයට ආදරය කළා. විශේෂයෙන් අපට ResultSet නැවත ජාවා වස්තුවකට හෝ දත්ත වර්ගයකට සිතියම් ගත කිරීමට අවශ්‍ය නොවීය.

අපගේ වෙබ් යෙදුම් වලට ආදර්ශ දර්ශන පාලක රටාව එක් කිරීමට ස්ට්‍රට්ස් පැමිණියේය, එය හොඳයි.

ඊ.ජේ.බී. විශාල බරක් සහ වේදනාවක් සහ විවරණ මගින් කේත කුකුළු මස් සීරීමට සමාන වූ අතර දැන් වසන්තය අප වෙත අහිංසක මිනිසුන් බිහි විය. එය මට ඕනෑවට වඩා වැඩියි.

උදාහරණයක් ලෙස අපි දැන් අපගේ සරල jdbc url, පරිශීලකයා, පළමුව jdbc.properties වෙතටද, දෙවනුව ශිශිර ගුණාංගවලටද, තෙවන වර වසන්ත බෝංචි වලටද ඇසුරුම් කරමු!

මේ සියල්ලට එදිරිව, ඔබට අවශ්‍ය තැනක සම්බන්ධතාවයක් ලබා ගැනීම ගැන සලකා බලන්න, පිරිසිදු ජාවා හි පහත පෙන්වා ඇති පරිදි එය සරල ය, එය වසන්තය සමඟ ඇති උණුසුම් වාතය හරහා ගිය පසු අපි සැබවින්ම කරන්නේ එයයි:

Connection connection = DriverManager.getConnection(url, user, pass);

වෙනත් විශාල ප්‍රතිලාභයක් නොමැතිව සරල හා වේගවත් හා සරල දෙයක් කිරීමට විශාල වටයක් සහ වටයක් ඔතා ඇති බව එයම ස්වයං පැහැදිලි කිරීමකි. එය ඉතා හොඳ තෑග්ගක් වටා ටොන් සහ තෑගි කඩදාසි ටොන් ගණනක් ඔතා තැබීම හා සමානයි.

තවත් උදාහරණයක් වන්නේ කණ්ඩායම් යාවත්කාලීන කිරීමකි. වසන්තය සමඟ එය පන්ති කිහිපයක් සම්බන්ධ කර ඇත, ඔබට කණ්ඩායම් යාවත්කාලීනයක් කිරීමට JdbcTemplate භාවිතා කිරීමට පෙර අතුරුමුහුණත්. සරල jdbc සමඟ එය සරලව:

Statement statement = connection.createStatement();
statement.addBatch(sqlquery);
statement.executeBatch();

ඊට වඩා සරල හෝ වේගවත් විය නොහැක.

මම මෙම රාමුවට සහාය නොදක්වමි. සමාවන්න. ඕනෑම දෙයක් අවශ්‍ය විටෙක එන්නත් කිරීමට පොළොවේ සිටින කාටද?


6
එම කේතය සරලයි, නමුත් ඔබේ සංක්‍රාන්ති හැසිරවීම අර්ථ දක්වන්නේ කොතැනින්ද සහ ඔබ එය පරීක්ෂා කරන්නේ කෙසේද? මේ දෙකම වසන්තය වන විට සරල කර ඇත. එසේම, ඔබ ජාවා කේතය සෘජුවම ඩීබී සම්බන්ධතාවයකට බැඳී ඇත, ඔබ සම්බන්ධතා යූආර්එල් සහ මුරපද බාහිරව ගබඩා නොකරන්නේ නම්, මෙය වසන්තය වන විටද සරල කරයි.
නිම්චිම්ප්ස්කි

මෙම පිළිතුර සඳහා +1, ඉහත අදහස් දැක්වීම සඳහා මිනිසා ඔබේම සැහැල්ලු සැලසුම් රටා (GOF), සම්බන්ධතා සංචිතය සඳහා සිංගල්ටන්, දත්ත සමුදා වස්තුවට වර්ග (නූල්) සහ අගයන් (අරාව) සපයන ප්‍රොක්සි පන්තියක් භාවිතා කරයි (කුමන ක්‍රමයද? , http ක්‍රමය මත රඳා පවතී), dbobject සම්බන්ධතා සංචලනය, ගනුදෙනු ආදිය හසුරුවයි. සෑම මොඩියුලයකම එක් වස්තුවක් භාවිතා කිරීම, කිසිවෙකුට අධික බොයිලේරු තහඩු කේතය අවශ්‍ය නොවේ. ප්‍රොක්සි පන්තිය සහ ඩොබෝබෙක්ට් මත ඒකක පරීක්ෂණ සැකසීම සමඟ ප්‍රසාද ලක්ෂ්‍යය.
user2727195

වසන්ත-දත්ත-ජේපීඒ බලන්න! FindhoammerByWeight () වැනි සාධාරණ නම් භාවිතා කරමින් පොජෝවක් ආයතනයකට විවරණය කරන්න, අතුරු මුහුණතක් ක්‍රියාත්මක කරන්න සහ ක්‍රම අත්සන් අත්සන් කරන්න, සහ වසන්තය ඔබ සඳහා ක්‍රම ක්‍රියාත්මක කරයි, ඔබේ අනෙකුත් සියලුම ව්‍යාපාරික සේවා හෝ පාලක පන්ති වලදී ඔබට භාවිතා කළ හැකි එන්නත් කළ හැකි ගබඩාවක් ලබා දෙයි. .
mancini0

13

වසන්ත රාමුව කරන්නේ කුමක්ද?

වසන්තය අද මෙන් නොව, සරල රාමුවක් ලෙස හැඳින්වූ දේ, එය සම්පූර්ණ පරිසර පද්ධතියකි.

වසන්ත පරිසර පද්ධතියෙන් ආවරණය වන මාතෘකා:

  • වසන්ත රාමුව (උදා: යැපුම් එන්නත්, AOP ...)

  • වසන්ත වලාකුළු

  • වසන්ත දත්ත

  • වසන්ත ආරක්ෂාව

  • වසන්ත කණ්ඩායම

  • වසන්ත සමාජ

පරිසර පද්ධතියේ සම්පූර්ණ ආවරණය සඳහා මෙහි බලන්න . චෙරි-පික් ප්‍රොජෙක්ට්ස් කළ හැකි අතර, එවිට ඔබට DI සඳහා ගූගල් ගයිස් භාවිතා කළ හැකිය. උදා: ආරක්‍ෂාව හා සම්බන්ධ දේවල් හැසිරවීමට වසන්ත ආරක්ෂාව. ඔබට සමස්ත පරිසර පද්ධතියටම මිලදී ගැනීමට අවශ්‍ය නැත.

වසන්ත රාමුව අදම ප්‍රධාන වශයෙන් ආවරණය කරයි

  • යැපුම් එන්නත් කිරීම

  • වසන්තයේ ප්‍රකාශන ගනුදෙනු කළමනාකරණය ඇතුළුව ඇස්පෙක්ට්-ඔරියන්ටඩ් ක්‍රමලේඛනය

  • වසන්ත MVC වෙබ් යෙදුම සහ RESTful වෙබ් සේවා රාමුව

  • JDBC, JPA, JMS සඳහා පදනම් සහාය

මූලාශ්‍රය spring.io.

පොදුවේ ගත් කල, ඔබට කිව හැකිය, වසන්තය යනු කේතයේ ක්‍රියාත්මක කරන ලද රටා සහ පරිචයන් එකතුවකි, එය ඔබගේ යෙදුම් සංවර්ධන චක්‍රය වැඩි දියුණු කිරීමට හෝ වේගවත් කිරීමට උපකාරී වේ.

එය (හර-රාමුව) වඩාත්ම ප්‍රචලිත වන්නේ පරායත්ත එන්නත් කිරීමේ ක්ෂේත්‍රයේ ඇති හැකියාවයි . වසන්තය ම නමින් හැඳින්වෙන දේ, ඇත පාලනය කන්ටේනර් විමුක්තිය පරම හෝ කෙටි IOC බහාලුම් හෝ ඊටත් වඩා කෙටි කන්ටේනර් (සඳහා "වසන්තය" සමහර විට භාවිතා ජලයත්).

පරායත්ත එන්නත් කිරීම යනු කුමක්ද?

පරායත්ත එන්නත් කිරීම යන්නෙන් අදහස් වන්නේ, ඔබේ වස්තුව වෙනත් වස්තූන් වෙත සෑම යැපීමක්ම බාහිරකරණය කළ යාන්ත්‍රණයක් හරහා ලබා ගන්නා බවයි.

ඔබට මෝටර් රථයක් ඇති බව පවසන්න, සාමාන්‍ය ක්‍රමය, එය ක්‍රියාත්මක වන්නේ:

public class Car {

    Engine e;

    public Car() { 
        e = new Engine(); 
    }

}

කාර් වස්තුව එන්ජිමක් මත රඳා පවතී. මෝටර් රථයේ සාමාජිකයෙකු ලෙස එන්ජිම ක්‍රියාත්මක වන බැවින්, උදා: පරීක්ෂණ එන්ජිමක් සඳහා එය මාරු කළ නොහැක.

දැන් පරායත්ත එන්නත් ක්‍රියාත්මක වේ:

public class Car {

    Engine e;

    public Car(Engine e) { 
        this.e = e; 
    }

}

ඊට පසු, ඔබට එන්ජින් මාරු කළ හැකිය. ඉහත ඔබ දකින දේ ඉදිකිරීම්කරු එන්නත් කිරීම ලෙස හැඳින්වේ . උදා: setter -injection හෝ method -injection වැනි වෙනත් වර්ග තිබේ. වසන්තය ඔබට මේ සඳහා උදව් කරන්නේ කෙසේද? @Autowiredව්‍යාඛ්‍යාව සමඟ එන්නත් කළ යුතු කොටස් සලකුණු කිරීමට වසන්තය ඉඩ දෙන අතර එන්නත් කරන ලද වස්තුව ස්වයංක්‍රීයව රැහැන්ගත කරයි - බොහෝ විට ඔබට එන්නත් කිරීමට අවශ්‍ය සංරචකයටම පරායත්තතා ඇති බව පෙනේ. එන්නත් - එසේ පැවසීමට - සලකුණු කර ඇත@Component

public class Car {

    Engine e;

    @Autowired
    public Car(Engine e) { 
        this.e = e; 
    }

}

නමුත් එය වසන්තය විසින් පිරිනමනු ලබන බොහෝ අංග වලින් එකක් පමණි.

මම වසන්තය භාවිතා කළ යුතුද? ඇයි හෝ නැත්තේ ඇයි?

වසන්තය එතරම් ආක්‍රමණශීලී නොවන අතර බොහෝ ආධාරක ලබා දෙන බැවින් ඔබ වසන්තය භාවිතා කිරීම ගැන සලකා බැලිය යුතුය. විශේෂයෙන් නව ව්යාපෘති සඳහා, වසන්ත බූට් ඉතා ආකර්ෂණීය වේ. start.spring.io ආරම්භ කිරීම සඳහා ව්‍යාපෘති අච්චුවක් ජනනය කිරීම සඳහා point'n'click -interface භාවිතා කිරීමට පහසුය . curlඅච්චුවක් ලබා ගැනීමට පවා භාවිතා කළ හැකිය:

curl start.spring.io

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

:: Spring Initializr ::  https://start.spring.io

This service generates quickstart projects that can be easily customized.
Possible customizations include a project's dependencies, Java version, and
build system or build structure. See below for further details.

The services uses a HAL based hypermedia format to expose a set of resources
to interact with. If you access this root resource requesting application/json
as media type the response will contain the following links:
+-----------------+-----------------------------------------+
| Rel             | Description                             |
+-----------------+-----------------------------------------+
| gradle-build    | Generate a Gradle build file            |
| gradle-project  | Generate a Gradle based project archive |
| maven-build     | Generate a Maven pom.xml                |
| maven-project * | Generate a Maven based project archive  |
+-----------------+-----------------------------------------+

...

අනෙක් අතට, ස්පාර්ක් හෝ ඩ්‍රොප්විජාර්ඩ් වැනි රාමු ඉක්මන් වෙබ් යෙදුම් නිර්මාණය සඳහා හොඳ ආරම්භක ස්ථානයක් ලබා දෙයි.


1
ඉතා තොරතුරු සහිත පිළිතුරක්!
GOXR3PLUS

එකඟයි, ඉතා හොඳ පිළිතුරක්. OP, මම ඔබට අනුකම්පා කරමි. එක්ස්එම්එල් ගොනුවක් සහ ඉන්ඩෙක්ෂන් ස්ථර 2 ක් එකතු කිරීමෙන් කේතය "සරල" කරන පුද්ගලයන් කිහිප දෙනෙකු මට පෙන්වූවා. ඒ නිසා ඔවුන්ට පන්තියේ ඉදිකිරීම්කරු අමතන්න පුළුවන් :) ඔබට ඇත්තටම කිමිදීමට හෝ ඒ වෙත යාමට අවශ්‍යයි ඇත්තෙන්ම හොඳ ඉදිරිපත් කිරීමක් වන අතර අවසානයේ එහි වාසි සහ අවාසි කොතැනද යන්න පැහැදිලි වනු ඇත
ඇඩම් හියුස්

4

එය ඔබගේ වෙබ් යෙදුම ක්‍රියාකාරී කිරීම සඳහා ඇතුළත් කර ඇති බොහෝ දේ ඇතුළත් ජාවාහි රාමුවකි (උදා: ජාත්‍යන්තරකරණය සඳහා සහාය). එය ඔබගේ යෙදුම ස්ථර වලට සැකසීමට හොඳ ක්‍රමයක් ද සපයයි. එය භාවිතා කරන්න, එය දිගු කාලීනව ඔබට බොහෝ කාලයක් ඉතිරි කරනු ඇත.

වසන්තය ගැන ඉගෙන ගැනීමට හොඳ පොතක් නම්: විශේෂ Spring වසන්ත එම්වීසී සහ වෙබ් ප්‍රවාහය

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.