บทความนี้จะอธิบายการจัดการพื้นฐานของ Spring Bean พร้อมตัวอย่าง แชร์ให้ทุกท่านได้ใช้อ้างอิง โดยมีรายละเอียดดังนี้
1. ใช้วิธี setter เพื่อดำเนินการฉีดการพึ่งพาให้เสร็จสมบูรณ์
ด้านล่างนี้คือไฟล์ Bean และ beans-config.xml
HelloBean คลาสสาธารณะ { สตริงส่วนตัว helloWord; //...ละเว้นวิธีการ getter และ setter}
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans. dtd"> <beans> <bean id="helloBean" > <property name="helloWord"> <value>สวัสดี!จัสติน!</value> </property> </ถั่ว> </ถั่ว>
SpringDemo คลาสสาธารณะ { โมฆะสาธารณะ main (String [] args) { ทรัพยากร rs = new FileSystemResource ("beans-config.xml"); โรงงาน BeanFactory = XmlBeanFactory ใหม่ (rs); helloBean"); System.out.println(hello.getHelloWord()); } }
2. ใช้วิธีการสร้างเพื่อให้การฉีดเสร็จสมบูรณ์
คลาสสาธารณะ HelloBean { ชื่อสตริงส่วนตัว helloWord; // ขอแนะนำให้มีวิธีการก่อสร้างแบบไม่มีพารามิเตอร์ สาธารณะ HelloBean() { } สาธารณะ HelloBean(ชื่อสตริง, สตริง helloWord) { this.name = name; ; } //...ละเว้นวิธีการ getter และ setter}
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans. dtd"> <beans> <bean id="helloBean" > <constructor-arg index="0"> <value>จัสติน</value> </constructor-arg> <constructor-arg index="1"> <value>สวัสดี</value> </constructor-arg> </bean> </beans>
SpringDemo คลาสสาธารณะ { สาธารณะคงโมฆะ main (String [] args) { ApplicationContext context = new FileSystemXmlApplicationContext ("beans-config.xml"); HelloBean hello = (HelloBean) context.getBean ("helloBean"); ("ชื่อ: "); System.out.println(hello.getName()); System.out.print("คำ: "); System.out.println(hello.getHelloWord());
3. การอ้างอิงแอตทริบิวต์
คลาสสาธารณะ HelloBean { สตริงส่วนตัว helloWord วันที่ส่วนตัว; //...ละเว้นวิธีการ getter และ setter}
<beans> <bean id="dateBean"/> <bean id="helloBean"> <property name="helloWord"> <value>สวัสดี!</value> </property> <property name="date"> < อ้างอิง bean="dateBean"/> </property> </bean> </beans>
SpringDemo คลาสสาธารณะ { สาธารณะคงโมฆะ main (String [] args) { ApplicationContext context = new FileSystemXmlApplicationContext ("beans-config.xml"); HelloBean hello = (HelloBean) context.getBean ("helloBean"); (hello.getHelloWord()); System.out.print(" คือ "); System.out.print(hello.getDate()); System.out.println(".");
4. "byType" การเชื่อมโยงอัตโนมัติ
เปลี่ยนไฟล์การกำหนดค่าใน "สาม" ดังต่อไปนี้เพื่อให้การรวมแอตทริบิวต์ bean โดยอัตโนมัติตามประเภท
<beans> <bean id="dateBean"/> <bean id="helloBean" autowire="byType"> <property name="helloWord"> <value>สวัสดี!</value> </property> </bean> </ถั่ว>
5. "byName" การเชื่อมโยงอัตโนมัติ
เปลี่ยนไฟล์การกำหนดค่าใน "สาม" เป็นดังต่อไปนี้เพื่อให้การรวมแอตทริบิวต์ bean ตามชื่อโดยอัตโนมัติ
<beans> <bean id="dateBean"/> <bean id="helloBean" autowire="byName"> <property name="helloWord"> <value>สวัสดี!</value> </property> </bean> </ถั่ว>
6. "ตัวสร้าง" การเชื่อมโยงอัตโนมัติ
เปลี่ยนไฟล์การกำหนดค่าใน "สาม" ดังต่อไปนี้เพื่อให้การรวมแอตทริบิวต์ bean โดยอัตโนมัติตามวิธีการก่อสร้าง เมื่อสร้างความสัมพันธ์ที่ต้องพึ่งพา Spring Container จะพยายามเปรียบเทียบประเภทอินสแตนซ์ Bean ในคอนเทนเนอร์และประเภทพารามิเตอร์บนตัวสร้างที่เกี่ยวข้องเพื่อดูว่าประเภทนั้นสอดคล้องกันหรือไม่ หากเป็นเช่นนั้น ตัวสร้างจะถูกใช้เพื่อสร้างตัวอย่าง Bean . หากไม่สามารถผูกไว้ได้ ข้อยกเว้น org.springframework.beans.factory.UnsatisfiedDependencyException จะถูกส่งออกไป
<beans> <bean id="dateBean"/> <bean id="helloBean" autowire="constructor"> <property name="helloWord"> <value>สวัสดี!</value> </property> </bean> </ถั่ว>
6. “ตรวจจับอัตโนมัติ” การเชื่อมอัตโนมัติ
เปลี่ยนไฟล์การกำหนดค่าใน "สาม" ดังต่อไปนี้เพื่อให้การรวมคุณสมบัติ bean โดยอัตโนมัติหมายความว่า Spring จะพยายามใช้ Constructor เพื่อจัดการการขึ้นต่อกัน หากไม่ได้ผล ให้ลองใช้ byType คลาสเพื่อสร้างการพึ่งพา
<beans> <bean id="dateBean"/> <bean id="helloBean" autowire="autodetect"> <property name="helloWord"> <value>สวัสดี!</value> </property> </bean> </ถั่ว>
7. วิธีการตรวจสอบการพึ่งพา
ในการเชื่อมโยงอัตโนมัติ เนื่องจากไม่มีทางที่จะดูได้อย่างชัดเจนว่าแต่ละแอตทริบิวต์ได้รับการตั้งค่าจากไฟล์คำจำกัดความหรือไม่ เพื่อให้แน่ใจว่ามีการขึ้นต่อกันบางอย่างจริงๆ คุณจึงสามารถตั้งค่าการตรวจสอบการพึ่งพาได้เมื่อใช้แท็ก <bean> การตรวจสอบการพึ่งพา" มีวิธีการตรวจสอบการขึ้นต่อกันสี่วิธี: แบบง่าย อ็อบเจ็กต์ ทั้งหมด และไม่มีเลย
แบบง่าย: ตรวจสอบเฉพาะคุณสมบัติของประเภทแบบง่าย (เช่น ประเภทข้อมูลดั้งเดิมหรือออบเจ็กต์สตริง) การอ้างอิงที่สมบูรณ์หรือไม่
วัตถุ: ตรวจสอบว่าคุณสมบัติของประเภทวัตถุสมบูรณ์การพึ่งพาหรือไม่
ทั้งหมด: ตรวจสอบว่าแอตทริบิวต์ทั้งหมดมีการขึ้นต่อกันอย่างสมบูรณ์หรือไม่
ไม่มี: การตั้งค่านี้เป็นค่าเริ่มต้น ซึ่งบ่งชี้ว่าไม่ได้ตรวจสอบการขึ้นต่อกัน
<beans> <bean id="dateBean"/> <bean id="helloBean" autowire="autodetect" dependeny-check="all"> <property name="helloWord"> <value>สวัสดี!</value> < /คุณสมบัติ> </ถั่ว> </ถั่ว>
8. การรวบรวมวัตถุการฉีด
สำหรับออบเจ็กต์คอลเลกชัน เช่น อาร์เรย์ รายการ ชุด และแผนที่ จะต้องเติมออบเจ็กต์บางอย่างลงในคอลเลกชันก่อนการฉีด จากนั้นเมื่อออบเจ็กต์คอลเลกชันถูกฉีดเข้าไปใน bean ที่ต้องการ วัตถุเหล่านั้นก็สามารถรักษาหรือสร้างโดยอัตโนมัติโดยคอนเทนเนอร์ IoC ของ Spring รวบรวมวัตถุและการฉีดการพึ่งพาที่สมบูรณ์
คลาสสาธารณะ SomeBean { ส่วนตัว String[] someStrArray; ส่วนตัว SomeObjArray; someStrArray; } สาธารณะ Some[] getSomeObjArray() { return someObjArray; } สาธารณะเป็นโมฆะ setSomeObjArray (บาง [] someObjArray) { this.someObjArray = someObjArray; } รายการสาธารณะ getSomeMap () { กลับ someMap; โมฆะสาธารณะ setSomeMap (แมป someMap) { this.someMap = someMap; } } คลาสสาธารณะ บางส่วน { ชื่อสตริงส่วนตัว; สตริงสาธารณะ getName() { ชื่อส่งคืน;
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans. dtd"> <beans> <bean id="some1"> <property name="name"> <value>จัสติน</value> </property> </bean> <bean id="some2"> <property name="name"> <value>momor</value> </property> </bean> <bean id="someBean"> <property name="someStrArray"> <list> < ค่า>สวัสดี</value> <value>ยินดีต้อนรับ</value> </list> </property> <property name="someObjArray"> <list> <ref bean="some1"/> <ref ถั่ว = "some2"/> </list> </property> <ชื่อคุณสมบัติ = "someList"> <list> <value>ListTest</value> <ref bean = "some1"/> <ref bean = "some2" /> </list> </property> <property name="someMap"> <map> <entry key="MapTest"> <value>สวัสดี!จัสติน!</value> </entry> <entry key="someKey1 "> <ref bean="some1"/> </entry> </map> </property> </bean> </beans>
SpringDemo คลาสสาธารณะ { โมฆะสาธารณะ main (String [] args) { ApplicationContext context = new FileSystemXmlApplicationContext ( "beans-config.xml"); SomeBean someBean = (SomeBean) context.getBean ("someBean"); // รับประเภทอาร์เรย์ วัตถุการฉีดการพึ่งพาแบบมีสถานะ String[] strs = (String[]) someBean.getSomeStrArray(); Some[] somes = (บางส่วน[]) someBean.getSomeObjArray(); for(int i = 0; i < strs.length; i++) { System.out.println(strs[i] + "," + somes[i].getName() } // รับวัตถุการพึ่งพารายการ System.out.println(); List someList = (List) someBean.getSomeList(); for(int i = 0; i < someList.size(); i++) { System.out.println(someList.get(i)); } // รับออบเจ็กต์การพึ่งพาประเภทแผนที่ System.out.println(); (); System.out.println(someMap.get("MapTest")); System.out.println(someMap.get("someKey1")); -
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับทุกคนในการเขียนโปรแกรม Java