ในบทความที่แล้วฉันได้อธิบายสั้นๆ ว่า Spring คืออะไร และถั่วและบริบทคืออะไร ตอนนี้ได้เวลาทดลองใช้งานแล้ว ฉันจะใช้ IntelliJ IDEA Enterprise Edition แต่ตัวอย่างทั้งหมดของฉันควรใช้งานได้ใน IntelliJ IDEA Community Edition ฟรี ในภาพหน้าจอ ถ้าคุณเห็นว่าฉันมีบางหน้าต่างที่คุณไม่มี ไม่ต้องกังวล — มันไม่สำคัญสำหรับโปรเจ็กต์นี้ :)
ขั้นแรก สร้างโปรเจ็กต์ Maven ที่ว่างเปล่า ฉันแสดงวิธีทำในบทความที่ลิงค์นี้ . อ่านจนถึงคำว่า " ถึงเวลาที่เราจะแปลงโปรเจ็กต์ Maven เป็นโปรเจ็กต์เว็บแล้ว " — หลังจากนั้น บทความจะแสดงวิธีสร้างโปรเจ็กต์เว็บ แต่เราไม่ต้องการสิ่งนั้นในตอนนี้ ในsrc/main/javaโฟลเดอร์ สร้างแพ็คเกจ (ในกรณีของฉัน ฉันเรียกมันว่า "
ในหน้าต่างด้านซ้าย คุณจะเห็นโครงสร้างโครงการพร้อมแพ็คเกจและ

en.codegym.info.fatfaggy.animals
คุณสามารถเรียกมันว่าอะไรก็ได้ที่คุณต้องการ อย่าลืมแทนที่ชื่อแพ็คเกจของฉันด้วยชื่อแพ็คเกจของคุณในตำแหน่งที่ถูกต้อง ตอนนี้สร้างคลาสMain
และเพิ่ม วิธี
public static void main(String[] args) {
...
}
หลังจากนั้นให้เปิดไฟล์ pom.xml และเพิ่มdependencies
ส่วน ตอนนี้ไปที่ที่เก็บ Mavenและค้นหาบริบท Springสำหรับเวอร์ชันเสถียรล่าสุด ใส่สิ่งที่เราพบลงในdependencies
ส่วน ฉันได้อธิบายกระบวนการนี้อย่างละเอียดในบทความ CodeGym อื่น ๆ นี้ (ดูหัวข้อ " การเชื่อมต่อการพึ่งพาใน Maven ") จากนั้น Maven จะค้นหาและดาวน์โหลดการพึ่งพาที่จำเป็น ในตอนท้าย คุณควรจะได้สิ่งนี้: 
Main
คลาส หน้าต่างตรงกลางแสดงว่า pom.xml ค้นหาฉันอย่างไร ฉันยังเพิ่มคุณสมบัติส่วนไป ส่วนนี้จะบอก Maven ว่าฉันใช้ Java เวอร์ชันใดในไฟล์ต้นฉบับและเวอร์ชันใดที่จะคอมไพล์ นี่เป็นเพียงเพื่อไม่ให้ IDEA เตือนฉันว่าฉันใช้ Java เวอร์ชันเก่า นี่เป็นทางเลือก :) หน้าต่างด้านขวาทำให้ชัดเจนว่าแม้ว่าเราจะเชื่อมต่อโมดูลบริบทสปริงเท่านั้น แต่จะดึงโมดูลสปริงคอร์สปริงบีนสปริง aop และสปริงนิพจน์โดยอัตโนมัติ เราสามารถเชื่อมต่อแต่ละโมดูลแยกกัน โดยเขียนการพึ่งพาสำหรับแต่ละโมดูลด้วยเวอร์ชันที่ชัดเจนในไฟล์ pom.xml แต่ตอนนี้เราพอใจกับสิ่งที่เป็นอยู่ ตอนนี้สร้างentities
แพ็คเกจและสร้าง 3 คลาสในนั้น: Cat
, Dog
, Parrot
. ตั้งชื่อสัตว์แต่ละตัว (private String name
— คุณสามารถฮาร์ดโค้ดบางค่าได้ที่นั่น) getters/setters เป็นสาธารณะ ตอนนี้เราไปยังMain
คลาสและmain()
เมธอด และเราเขียนสิ่งนี้:
public static void main(String[] args) {
// Create an empty Spring context that will look for its own beans based on the annotations in the specified package
ApplicationContext context =
new AnnotationConfigApplicationContext("en.codegym.info.fatfaggy.animals.entities");
Cat cat = context.getBean(Cat.class);
Dog dog = (Dog) context.getBean("dog");
Parrot parrot = context.getBean("parrot-polly", Parrot.class);
System.out.println(cat.getName());
System.out.println(dog.getName());
System.out.println(parrot.getName());
}
ขั้นแรก เราสร้างคอนเท็กซ์อ็อบเจกต์ โดยบอกคอนสตรัคเตอร์ว่าควรค้นหาแพ็คเกจใดในการค้นหาบีน กล่าวอีกนัยหนึ่ง Spring จะผ่านแพ็คเกจนี้และพยายามค้นหาคลาสที่มีคำอธิบายประกอบพิเศษซึ่งระบุว่าเป็นถั่ว จากนั้นจะสร้างวัตถุของคลาสเหล่านี้และวางไว้ในบริบท หลังจากนั้นเราก็ได้แมวจากบริบทนี้ เราเรียกวัตถุบริบทเพื่อให้ถั่ว (วัตถุ) แก่เรา ซึ่งระบุคลาสของวัตถุที่เราต้องการ (อย่างไรก็ตาม เรายังสามารถระบุอินเทอร์เฟซ ไม่ใช่แค่คลาส) หลังจากนั้น Spring จะส่งคืนวัตถุของคลาสที่ร้องขอ ซึ่งเราจะบันทึกไว้ในตัวแปร ต่อไป เราขอให้สปริงหาถั่วที่เรียกว่า "สุนัข" ให้เรา เมื่อสปริงสร้างไฟล์Dog
วัตถุจะให้ชื่อมาตรฐานแก่วัตถุ (เว้นแต่ว่า bean ที่สร้างขึ้นได้รับการกำหนดชื่ออย่างชัดเจน) ซึ่งเป็นชื่อคลาส แต่ใช้อักษรตัวพิมพ์เล็กเริ่มต้น ในกรณีนี้ คลาสของเราเรียกว่าDog
ดังนั้นชื่อ bean จึงเป็น "dog" หากเราต้องการBufferedReader
วัตถุที่นั่น Spring จะตั้งชื่อว่า "bufferedReader" และเนื่องจาก Java ไม่สามารถแน่ใจได้ 100% ว่าเราต้องการคลาสใด จึงส่งคืนอ็Object
อบเจกต์ ซึ่งเราจะแปลงเป็นประเภทที่ต้องการด้วยตนเอง เช่นDog
. ตัวเลือกที่ระบุคลาสอย่างชัดเจนนั้นสะดวกกว่า ตัวเลือกที่สามคือการรับ bean ตามชื่อคลาสและตามชื่อ bean เป็นไปได้ว่าบริบทอาจมีหลายถั่วในคลาสเดียว เพื่อระบุถั่วที่เราต้องการ เราระบุชื่อของมัน เนื่องจากเราระบุคลาสอย่างชัดเจนที่นี่ เราจึงไม่ต้องแคสต์อีกต่อไป สำคัญ!หาก Spring พบ bean หลายตัวที่ตรงกับความต้องการของเรา ก็จะไม่สามารถระบุได้ว่าจะให้ bean ตัวไหนแก่เรา ดังนั้น Spring จะส่งข้อยกเว้น ดังนั้น เพื่อหลีกเลี่ยงสถานการณ์นี้ คุณควรพยายามระบุให้เฉพาะเจาะจงมากที่สุดเท่าที่จะเป็นไปได้ในการบอก Spring ว่าคุณต้องการถั่วชนิดใด หาก Spring ค้นหาบริบทและไม่พบถั่วเดียวที่ตรงกับข้อกำหนดของเรา ก็จะเกิดข้อยกเว้นเช่นกัน สุดท้าย เราเพียงแสดงชื่อสัตว์ของเราเพื่อตรวจสอบว่าเราได้รับสิ่งของที่ต้องการจริงๆ แต่ถ้าเรารันโปรแกรมตอนนี้ เราจะเห็นว่า Spring ไม่มีความสุข — มันไม่สามารถหาสัตว์ที่เราต้องการได้ในบริบทของมัน นี่เป็นเพราะมันไม่ได้สร้างถั่วเหล่านี้ อย่างที่ฉันได้กล่าวไปก่อนหน้านี้ เมื่อ Spring สแกนคลาส มันจะมองหาคำอธิบายประกอบของ Spring ของตัวเอง และถ้า Spring ไม่พบคำอธิบายประกอบเหล่านี้ จากนั้นมันไม่คิดว่าคลาสเหล่านี้สอดคล้องกับบีนที่ต้องสร้าง การแก้ไขปัญหานี้เพียงแค่ต้องเพิ่ม@Component
คำอธิบายประกอบหน้าสัตว์แต่ละประเภทของเรา
@Component
public class Cat {
private String name = "Oscar";
...
}
แต่มีมากขึ้น หากเราต้องบอก Spring อย่างชัดเจนว่า bean สำหรับคลาสนี้ควรมีชื่อเฉพาะ เราจะระบุชื่อในวงเล็บหลังคำอธิบายประกอบ ตัวอย่างเช่น หากต้องการบอก Spring ให้ตั้งชื่อ " parrot-polly
" ให้กับ parrot bean ซึ่งเป็นชื่อที่เราจะใช้เรียกนกแก้วนี้ในmain
วิธีการนี้ เราควรทำสิ่งนี้:
@Component("parrot-polly")
public class Parrot {
private String name = "Polly";
...
}
นี่คือจุดรวมของ การกำหนด ค่าอัตโนมัติ คุณเขียนคลาสของคุณ ทำเครื่องหมายด้วยคำอธิบายประกอบที่จำเป็น และบอก Spring ถึงแพ็คเกจที่มีคลาสของคุณ นี่คือแพ็คเกจที่เฟรมเวิร์กจะทำงานเพื่อค้นหาคำอธิบายประกอบและสร้างวัตถุของคลาสเหล่านี้ อย่างไรก็ตาม Spring ไม่เพียงแต่มองหา@Component
คำอธิบายประกอบเท่านั้น แต่ยังมองหาคำอธิบายประกอบอื่นๆ ทั้งหมดที่สืบทอดสิ่งนี้ด้วย ตัวอย่างเช่น , @Controller
, @RestController
, @Service
, @Repository
และอื่นๆ ซึ่งเราจะแนะนำในบทความต่อๆ ไป ตอนนี้เราจะพยายามทำสิ่งเดียวกันโดยใช้Java -based configuration ในการเริ่มต้น ให้ลบ@Component
คำอธิบายประกอบจากชั้นเรียนของเรา เพื่อทำให้สิ่งต่าง ๆ ท้าทายมากขึ้น ลองจินตนาการว่าเราไม่ได้เขียนคลาสเหล่านี้ ดังนั้นเราจึงไม่สามารถแก้ไขได้ง่าย ๆ ซึ่งหมายความว่าเราไม่สามารถเพิ่มคำอธิบายประกอบได้ มันเหมือนกับว่าคลาสเหล่านี้บรรจุอยู่ในห้องสมุดบางแห่ง ในกรณีนี้ เราจะแก้ไขคลาสเหล่านี้เพื่อให้ Spring จำคลาสเหล่านี้ไม่ได้ แต่เราต้องการวัตถุของคลาสเหล่านี้! ที่นี่เราต้องการการกำหนดค่าตาม Java เพื่อสร้างวัตถุ ในการเริ่มต้น ให้สร้างแพ็คเกจที่มีชื่อconfigs
เช่น ในแพ็คเกจนี้ ให้สร้างคลาส Java ทั่วไป เช่นMyConfig
และทำเครื่องหมายด้วย@Configuration
คำอธิบายประกอบ
@Configuration
public class MyConfig {
}
ตอนนี้เราต้องปรับแต่งmain()
วิธีการ เปลี่ยนวิธีที่เราสร้างบริบท เราสามารถระบุได้อย่างชัดเจนว่าคลาสใดมีการกำหนดค่าของเรา:
ApplicationContext context =
new AnnotationConfigApplicationContext(MyConfig.class);
หากเรามีคลาสที่แตกต่างกันหลายคลาสที่สร้าง bean และเราต้องการเชื่อมต่อหลายคลาสพร้อมกัน เราก็เพียงระบุคลาสเหล่านั้นทั้งหมดโดยคั่นด้วยเครื่องหมายจุลภาค:
ApplicationContext context =
new AnnotationConfigApplicationContext(MyConfig.class, MyAnotherConfig.class);
และหากเรามีจำนวนมากเกินไปและต้องการเชื่อมต่อทั้งหมดพร้อมกัน เราก็เพียงระบุชื่อแพ็คเกจที่มีอยู่ใน:
ApplicationContext context =
new AnnotationConfigApplicationContext("en.codegym.info.fatfaggy.animals.configs");
ในกรณีนี้ Spring จะตรวจสอบแพ็คเกจและค้นหาคลาสทั้งหมดที่มี@Configuration
คำอธิบายประกอบ และถ้าเรามีโปรแกรมขนาดใหญ่จริง ๆ ที่การกำหนดค่าแบ่งออกเป็นแพ็คเกจต่าง ๆ เราก็เพียงแค่ระบุรายชื่อแพ็คเกจที่มีการกำหนดค่าด้วยเครื่องหมายจุลภาคคั่นด้วย:
ApplicationContext context =
new AnnotationConfigApplicationContext("en.codegym.info.fatfaggy.animals.database.configs",
"en.codegym.info.fatfaggy.animals.root.configs",
"en.codegym.info.fatfaggy.animals.web.configs");
หรือชื่อของแพ็คเกจที่ใช้ร่วมกันทั้งหมด:
ApplicationContext context =
new AnnotationConfigApplicationContext("en.codegym.info.fatfaggy.animals");
คุณสามารถทำได้ตามที่คุณต้องการ แต่สำหรับฉันแล้วดูเหมือนว่าตัวเลือกแรกซึ่งระบุคลาสที่มีการกำหนดค่าจะเหมาะกับโปรแกรมของเรามากที่สุด เมื่อสร้างบริบท Spring จะมองหาคลาสที่มี@Configuration
เครื่องหมายกำกับ และจะสร้างออบเจกต์ของคลาสเหล่านี้เอง มันพยายามเรียกเมธอดที่มี@Bean
คำอธิบายประกอบ ซึ่งหมายความว่าเมธอดเหล่านี้ส่งคืนถั่ว (วัตถุ) ที่สปริงจะเพิ่มในบริบท และตอนนี้เราจะสร้าง bean สำหรับแมว สุนัข และนกแก้วในชั้นเรียนของเราด้วยการกำหนดค่าตาม Java มันค่อนข้างง่ายที่จะทำ:
@Bean
public Cat getCat() {
return new Cat();
}
ที่นี่เราสร้างแมวของเราด้วยตนเองและมอบให้ Spring ซึ่งจะเก็บวัตถุของเราไว้ในบริบทของมัน เนื่องจากเราไม่ได้ตั้งชื่อให้กับ bean ของเราอย่างชัดเจน Spring จึงตั้งชื่อให้เหมือนกับชื่อเมธอด ในกรณีของเรา ถั่วแมวจะเรียกว่า " getCat
" แต่เนื่องจากเราใช้คลาส ไม่ใช่ชื่อ เพื่อให้ได้ cat bean ในเมธอดmain
ชื่อของ bean จึงไม่สำคัญสำหรับเรา ในทำนองเดียวกัน ให้สร้าง dog bean โดยจำไว้ว่า Spring จะตั้งชื่อเมธอดให้กับ bean ในการตั้งชื่อ Parrot bean ของเราอย่างชัดเจน เราเพียงระบุชื่อในวงเล็บหลัง@Bean
คำอธิบายประกอบ:
@Bean("parrot-polly")
public Object weNeedMoreParrots() {
return new Parrot();
}
อย่างที่คุณเห็น ที่นี่ฉันระบุObject
ประเภทการคืนสินค้าและตั้งชื่อเมธอดตามอำเภอใจ การดำเนินการนี้ไม่มีผลกับชื่อถั่ว เนื่องจากเราได้ระบุชื่อไว้ที่นี่อย่างชัดเจน ถึงกระนั้นก็เป็นการดีกว่าที่จะระบุค่าส่งคืนและชื่อเมธอดที่มีความหมายมากหรือน้อย ทำสิ่งนี้หากไม่มีเหตุผลอื่นนอกจากทำประโยชน์ให้ตัวเองเมื่อคุณเปิดโครงการอีกครั้งในหนึ่งปี :) ตอนนี้ให้พิจารณาสถานการณ์ที่ เราต้องการหนึ่งถั่ว เพื่อสร้างอีกถั่ว ตัวอย่างเช่น สมมติว่าเราต้องการให้ชื่อแมวใน cat bean เป็นชื่อนกแก้วบวกกับสตริง "-killer" ไม่มีปัญหา!
@Bean
public Cat getCat(Parrot parrot) {
Cat cat = new Cat();
cat.setName(parrot.getName() + "-killer");
return cat;
}
ที่นี่ Spring จะเห็นว่าในการสร้าง bean นี้ เฟรมเวิร์กจำเป็นต้องส่งผ่าน parrot bean ที่สร้างไว้ก่อนหน้านี้ ดังนั้น มันจะจัดการการเรียกเมธอดที่จำเป็น: ขั้นแรก เมธอดสร้างนกแก้วจะถูกเรียก จากนั้นเฟรมเวิร์กจะส่งนกแก้วตัวใหม่ไปยังเมธอดสร้างแมว นี่คือที่มาของการฉีดพึ่งพา: สปริงเองส่งถั่วนกแก้วที่จำเป็นไปยังวิธีการของเรา หาก IDEA ไม่พอใจเกี่ยวกับparrot
ตัวแปร อย่าลืมเปลี่ยนประเภทการส่งคืนของวิธีการสร้างนกแก้วจากObject
เป็น Parrot
นอกจากนี้ การกำหนดค่าบน Java ยังให้คุณรันโค้ด Java ใดๆ ก็ได้ในวิธีการสร้างถั่วของคุณ คุณสามารถทำอะไรก็ได้จริงๆ: สร้างออบเจกต์เสริมอื่นๆ เรียกใช้เมธอดอื่นๆ แม้กระทั่งวิธีที่ไม่ได้ทำเครื่องหมายด้วยคำอธิบายประกอบสปริง สร้างลูป เงื่อนไขบูลีน — อะไรก็ตามที่อยู่ในใจ! ทั้งหมดนี้ไม่สามารถทำได้ด้วยการกำหนดค่าอัตโนมัติ และแม้แต่การกำหนดค่า XML ที่น้อยกว่านั้น ทีนี้ลองมาพิจารณาปัญหาที่สนุกขึ้นอีกสักหน่อย ความหลากหลายและอินเทอร์เฟซ :) เราจะสร้างWeekDay
อินเทอร์เฟซและสร้าง 7 คลาสที่ใช้อินเทอร์เฟซนี้: Monday
, Tuesday
, Wednesday
, Thursday
, Friday
, Saturday
, Sunday
. เราจะให้String getWeekDayName()
วิธีการแก่อินเทอร์เฟซซึ่งจะส่งคืนชื่อวันในสัปดาห์สำหรับชั้นเรียนที่เกี่ยวข้อง กล่าวอีกนัยหนึ่งMonday
ชั้นจะกลับมา "Monday
" ฯลฯ เมื่อเริ่มต้นแอปพลิเคชัน สมมติว่างานของเราคือใส่ bean ที่ตรงกับวันปัจจุบันของสัปดาห์ลงในบริบท ไม่ใช่ bean สำหรับทุกคลาสที่ใช้อินเทอร์เฟซ — เฉพาะ bean เดียวเท่านั้นที่เราต้องการ คุณWeekDay
สามารถ ทำสิ่งนี้เกี่ยวกับสิ่งนี้:
@Bean
public WeekDay getDay() {
DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
switch (dayOfWeek) {
case MONDAY: return new Monday();
case TUESDAY: return new Tuesday();
case WEDNESDAY: return new Wednesday();
case THURSDAY: return new Thursday();
case FRIDAY: return new Friday();
case SATURDAY: return new Saturday();
default: return new Sunday();
}
}
นี่คือประเภทการส่งคืนคืออินเทอร์เฟซของเรา เมธอดส่งคืนออบเจกต์โดยสุจริตของหนึ่งในคลาสที่ใช้อินเทอร์เฟซ ขึ้นอยู่กับวันปัจจุบันของสัปดาห์ ตอนนี้เราสามารถทำได้ในmain()
วิธีการต่อไปนี้:
WeekDay weekDay = context.getBean(WeekDay.class);
System.out.println("Today is " + weekDay.getWeekDayName() + "!");
สำหรับฉัน โปรแกรมบอกฉันว่าเป็นวันอาทิตย์ :) ฉันมั่นใจว่าถ้าฉันรันโปรแกรมในวันพรุ่งนี้ บริบทจะมีออบเจกต์ที่แตกต่างไปจากเดิมอย่างสิ้นเชิง โปรดทราบว่าเราได้รับ bean เพียงแค่ใช้อินเทอร์เฟซcontext.getBean(WeekDay.class)
: Spring จะค้นหาบริบทสำหรับ bean ที่ใช้อินเทอร์เฟซ และจะส่งคืน จากนั้นปรากฎว่าWeekDay
ตัวแปรของเราลงเอยด้วยวัตถุวันอาทิตย์ และแนวคิดที่คุ้นเคยของความหลากหลายจะถูกนำไปใช้เมื่อเราทำงานกับตัวแปรนี้ :) ต่อไปนี้เป็นคำศัพท์สองสามคำเกี่ยวกับแนวทางการรวมซึ่ง Spring บางตัวสร้างถั่วโดยอัตโนมัติ บางส่วนโดยการสแกนแพ็คเกจสำหรับคลาสที่มี@Component
คำอธิบายประกอบ และอื่นๆ โดยการกำหนดค่าบน Java เมื่อเราพิจารณาเรื่องนี้ เราจะกลับไปใช้เวอร์ชันดั้งเดิมโดยที่Cat
, Dog
, และParrot
ชั้นเรียนถูกทำเครื่องหมายด้วย@Component
คำอธิบายประกอบ สมมติว่าเราต้องการสร้างถั่วสำหรับสัตว์ของเราโดยให้ Spring สแกนแพ็คเกจโดยอัตโนมัติแต่entities
เราต้องการสร้างถั่วด้วยวันในสัปดาห์เหมือนที่เราเพิ่งทำ สิ่งที่คุณต้องทำคือเพิ่ม@ComponentScan
คำอธิบายประกอบที่ระดับของMyConfig
คลาส ซึ่งเราระบุไว้เมื่อสร้างบริบทในmain()
และระบุในวงเล็บถึงแพ็คเกจที่ต้องสแกนและสร้างบีนของคลาสที่จำเป็นโดยอัตโนมัติ:
@Configuration
@ComponentScan("en.codegym.info.fatfaggy.animals.entities")
public class MyConfig {
@Bean
public WeekDay getDay() {
DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
switch (dayOfWeek) {
case MONDAY: return new Monday();
case TUESDAY: return new Tuesday();
case WEDNESDAY: return new Wednesday();
case THURSDAY: return new Thursday();
case FRIDAY: return new Friday();
case SATURDAY: return new Saturday();
default: return new Sunday();
}
}
}
เมื่อสร้างบริบท Spring จะเห็นว่าจำเป็นต้องประมวลผลMyConfig
คลาส เข้าสู่คลาสและเห็นว่าจำเป็นต้องสแกนen.codegym.info.fatfaggy.animals.entities
แพ็คเกจ " " และสร้างบีนของคลาสเหล่านั้น หลังจากนั้นจึงรันเมธอดMyConfig
ของคลาสgetDay()
และเพิ่มWeekDay
บีนในบริบท ในmain()
วิธีการนี้ ตอนนี้เราสามารถเข้าถึงถั่วทั้งหมดที่เราต้องการได้ ทั้งวัตถุที่เป็นสัตว์และถั่วที่มีวันในสัปดาห์ หากคุณต้องการให้ Spring เลือกไฟล์คอนฟิกูเรชัน XML ด้วย คุณสามารถค้นหาเว็บของคุณเองเพื่อค้นหาคำอธิบาย :) สรุป:
- ลองใช้การกำหนดค่าอัตโนมัติ
- ระหว่างการกำหนดค่าอัตโนมัติ ให้ระบุชื่อแพ็กเกจที่มีคลาสซึ่งบีนจำเป็นต้องสร้าง
- คลาสเหล่านี้ถูกทำเครื่องหมายด้วย
@Component
คำอธิบายประกอบ - Spring ดำเนินการผ่านคลาสเหล่านี้ทั้งหมด สร้างออบเจกต์ และใส่ไว้ในบริบท
- หากการกำหนดค่าอัตโนมัติไม่เหมาะกับเราด้วยเหตุผลบางประการ เราจะใช้การกำหนดค่าตาม Java
- ในกรณีนี้ เราสร้างคลาส Java ธรรมดาที่มีเมธอดส่งคืนวัตถุที่เราต้องการ เราทำเครื่องหมายคลาสนี้ด้วย
@Configuration
คำอธิบายประกอบหากเราจะสแกนทั้งแพ็คเกจแทนที่จะระบุคลาสเฉพาะด้วยการกำหนดค่าเมื่อสร้างบริบท - เมธอดของคลาสนี้ที่ส่งคืน bean จะถูกทำเครื่องหมายด้วย
@Bean
คำอธิบายประกอบ
@ComponentScan
คำอธิบายประกอบ
GO TO FULL VERSION