โครงสร้างโครงการมีดังนี้:
คิดยังไง? การเขียนโปรแกรมไปสู่นามธรรม?
มาดูแผนภาพลำดับกันก่อน
สิ่งที่สามารถเห็นได้จากด้านบน? หากคุณเป็นมือใหม่ จะแปลกถ้าคุณเห็นว่ามันคืออะไร ดังนั้นปล่อยมันไว้เฉยๆ มาดูการใช้งานเฉพาะกัน
ขั้นแรก สร้างคลาสเอนทิตี: ผู้ใช้ วางไว้ใต้แพ็คเกจโมเดล
แพ็คเกจ com.wwj.model; /** * คลาสเอนทิตี * @author wwj * Spring */ ชื่อผู้ใช้คลาสสาธารณะ { ชื่อผู้ใช้ String ส่วนตัว; รหัสผ่านสตริงสาธารณะ getUsername () { ส่งคืนชื่อผู้ใช้; { this.username = ชื่อผู้ใช้; } สตริงสาธารณะ getPassword() { กลับรหัสผ่าน; } โมฆะสาธารณะ setPassword (รหัสผ่านสตริง) { this.password = รหัสผ่าน;
ต่อไปนี้คือวิธีการโปรแกรมสำหรับ abstraction กล่าวโดยสรุปคือวิธีการโปรแกรมสำหรับอินเทอร์เฟซ
package com.wwj.dao; import com.wwj.model.User; /** * การเขียนโปรแกรมเชิงนามธรรม* @author wwj * ข้อดี: เพิ่มความยืดหยุ่น*/ อินเทอร์เฟซสาธารณะ UserDAO { บันทึกโมฆะสาธารณะ (ผู้ใช้)
จะเห็นได้อย่างชัดเจนว่าอินเทอร์เฟซนี้ประกาศวิธีการ วิธีบันทึก ซึ่งมีพารามิเตอร์ User object เราสามารถคิดว่ามันถูกใช้เพื่อบันทึกวัตถุ User ลงในฐานข้อมูล
ปล่อยให้การใช้งานเฉพาะเป็นคลาสการใช้งาน
แพ็คเกจ com.wwj.dao.impl; นำเข้า com.wwj.dao.UserDAO; นำเข้า com.wwj.model.User; /** *คลาสการใช้งานอินเทอร์เฟซ* @author wwj * */ คลาสสาธารณะ UserDAOImpl ใช้งาน UserDAO{ @Override public บันทึกเป็นโมฆะ (ผู้ใช้ผู้ใช้) { System.out.println ("บันทึกผู้ใช้");
ข้อดีก็คือ หากคุณต้องการเปลี่ยนสภาพแวดล้อมฐานข้อมูล คุณสามารถกำหนดรหัสฐานข้อมูลต่างๆ ได้อย่างยืดหยุ่น
จะเรียกวิธีการข้างต้นได้อย่างไร เพื่อแยกตรรกะทางธุรกิจออกจากการดำเนินงานฐานข้อมูล เราจำเป็นต้องกำหนดคลาสตรรกะทางธุรกิจ
แพ็คเกจ com.wwj.service; import com.wwj.dao.UserDAO; import com.wwj.dao.impl.UserDAOImpl; * */ UserService ระดับสาธารณะ { UserDAO ส่วนตัว userDAO; สาธารณะ UserDAO getUserDAO() { กลับ userDAO; } โมฆะสาธารณะ setUserDAO (UserDAO userDAO) { this.userDAO = userDAO; } การเพิ่มโมฆะสาธารณะ (ผู้ใช้ผู้ใช้) { this.userDAO.save (ผู้ใช้);
เราเห็นแล้วว่ามีอะไรอยู่ในนั้น อะไรสักอย่าง? UserDAO คุณเคยเห็นผลของมันไหม มันคงจะแปลกถ้าคุณทำ แนวคิดของ IOC หรือที่เรียกว่า DI ได้รับการออกแบบที่นี่ ความหมายภาษาจีนเรียกว่า dependency injector หรือที่เรียกว่า inversion of control นี่เป็นแนวคิดที่สำคัญมากใน Spring เท่านั้น ฤดูใบไม้ผลิ.
ต่อไปนี้เป็นการจำลองการใช้งาน Spring อย่างแท้จริง ซึ่งคล้ายกับรูปแบบโรงงานเล็กน้อย การใช้ Spring ทำให้เราสามารถรวบรวมวัตถุต่างๆ เข้าด้วยกันเพื่อใช้งาน
ขั้นแรก ให้ดูที่ไฟล์คอนฟิกูเรชัน beans.xml
<beans> <bean id="u" /> <bean id="userService" > <ชื่อคุณสมบัติ="userDAO" bean="u"/> </bean> </beans>
วิธีการแบบโรงงาน
แพ็คเกจ com.wwj.spring; BeanFactory { วัตถุสาธารณะ getBean (ชื่อสตริง)
คลาสที่แยกวิเคราะห์ไฟล์ xml และใช้ BeanFactory
แพ็คเกจ com.wwj.spring; นำเข้า java.lang.reflect.Method; นำเข้า java.util.HashMap; นำเข้า java.util.Map; ; นำเข้า org.jdom.input.SAXBuilder คลาสสาธารณะ ClassPathXmlApplicationContext ใช้ BeanFactory { //กำหนดคอนเทนเนอร์เพื่อจัดเก็บออบเจ็กต์ส่วนตัว Map<String,Object> beans = new HashMap<String, Object>(); Public ClassPathXmlApplicationContext() ส่งข้อยกเว้น{ SAXBuilder sb = new SAXBuilder(); Document doc = sb.build (this .getClass().getClassLoader().getResourceAsStream("beans.xml")); องค์ประกอบ root = doc.getRootElement(); // รับรายการโหนดรูท = root.getChildren("bean"); // องค์ประกอบทั้งหมดที่มีชื่อ bean สำหรับ (int i = 0; i < list.size(); i++) { Element element = (องค์ประกอบ) list.get(i); String id = element.getAttributeValue("id"); //รับค่า ID String cla = element.getAttributeValue("class"); //รับค่าคลาส Object o = Class.forName(cla).newInstance(); System.out.println(id); System.out.println(cla); beans.put(id,o); สำหรับ(องค์ประกอบ propertyElement : (รายการ <องค์ประกอบ> )element.getChildren("property")){ String name = propertyElement.getAttributeValue("name"); // UserDAO String bean = propertyElement.getAttributeValue("bean"); //u Object beanObject = beans.get(bean);//UserDAOImpl instance //รวมชื่อเมธอดเข้าด้วยกันและใช้เมธอด setUserDAO String methodName = "set" + name.substring(0 , 1) .toUpperCase() + name.substring(1); System.out.println("method name = " + methodName); //ใช้กลไกการสะท้อนเพื่อรับเมธอดเมธอด m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]); //Inrigger วิธีการ} } } @Override วัตถุสาธารณะ getBean(ชื่อสตริง) { return beans.get("id");
มามีชั้นเรียนทดสอบกันเถอะ
แพ็คเกจ com.wwj.service; นำเข้า org.junit.Test; นำเข้า com.wwj.model.User; นำเข้า com.wwj.spring.BeanFactory; นำเข้า com.wwj.spring.ClassPathXmlApplicationContext; ผู้เขียน wwj * */ คลาสสาธารณะ UserServiceTest { @Test โมฆะสาธารณะ testAdd () ส่งข้อยกเว้น { BeanFactory beanFactory = ClassPathXmlApplicationContext(); บริการผู้ใช้ =(UserService)beanFactory.getBean("userService"); ผู้ใช้ u = ผู้ใช้ใหม่(u);
เราสามารถดูเบาะแสบางอย่างจากคลาสทดสอบ ขั้นแรกให้กำหนดวัตถุ BeanFactory ใช้วัตถุนี้เพื่อแลกเปลี่ยนวิธี getBean เพื่อรับวัตถุคลาสตรรกะทางธุรกิจ ต่อมาคุณสามารถเพิ่มวัตถุผู้ใช้ลงในฐานข้อมูลโดยการเรียกวิธีการเพิ่มของ คลาสบริการนี้เข้าไปเลย แน่นอนว่าการแทรกลงในฐานข้อมูลไม่ได้ถูกนำมาใช้ที่นี่ แต่การทดสอบเป็นเพียงการดำเนินการ ในความเป็นจริงกระบวนการทั้งหมดมีความชัดเจนมาก ไฟล์การกำหนดค่าหลักของ Spring จะควบคุมวัตถุ เมื่อใช้งาน วัตถุจะถูกฉีดเข้าไปในคลาสบริการ สามารถใช้วัตถุของเลเยอร์ DAO เพื่อดำเนินการที่เกี่ยวข้องกับฐานข้อมูล การดำเนินงาน
ข้างต้นเป็นเนื้อหาการกำหนดค่าสปริงที่รวบรวมทางออนไลน์ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน