Die Projektstruktur ist wie folgt:
Wie denken? Programmieren in Richtung Abstraktion?
Schauen wir uns zunächst ein Sequenzdiagramm an
Was ist aus dem oben Gesagten ersichtlich? Wenn Sie ein Anfänger sind, ist es seltsam, wenn Sie sehen können, was es ist, also lassen Sie es in Ruhe. Werfen wir einen Blick auf die konkrete Implementierung
Erstellen Sie zunächst eine Entitätsklasse: Benutzer, und fügen Sie sie unter das Modellpaket ein
package com.wwj.model; /** * Entity class * @author wwj * Spring */ public class User { private String username; { this.username = username; } public String getPassword() { return Password } public void setPassword(String Password) { this.password = Password } }
Im Folgenden erfahren Sie, wie Sie eine Schnittstelle programmieren.
package com.wwj.dao; import com.wwj.model.User; /** * Abstraktionsorientierte Programmierung* @author wwj * Vorteile: erhöhte Flexibilität*/ public interface UserDAO { public void save(User user }
Es ist deutlich zu erkennen, dass diese Schnittstelle eine Methode, die Speichermethode, mit einem Parameter-Benutzerobjekt deklariert. Wir können uns vorstellen, dass sie zum Speichern des Benutzerobjekts in der Datenbank verwendet wird.
Überlassen Sie die spezifische Implementierung der Implementierungsklasse
package com.wwj.dao.impl; import com.wwj.model.User; /** *Interface-Implementierungsklasse* @author wwj * */ public class UserDAOImpl implementiert UserDAO{ @Override public void save(Benutzer user) { System.out.println("save user" } }
Dies hat den Vorteil, dass Sie bei einem Wechsel der Datenbankumgebung flexibel unterschiedliche Datenbankcodes definieren können.
Wie rufe ich die obige Methode auf? Um Geschäftslogik von Datenbankoperationen zu trennen, müssen wir eine Geschäftslogikklasse definieren.
package com.wwj.service; import com.wwj.dao.UserDAO; import com.wwj.model.User; /** * Serviceklasse, Implementierung der Geschäftslogik* * */ public class UserService { private UserDAO userDAO; public UserDAO getUserDAO() { return userDAO } public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO } public void add(User user) { this.userDAO.save(user } }
Wir können sehen, da ist etwas drauf, etwas? UserDAO, haben Sie die Wirkung gesehen? Es wäre seltsam, wenn Sie es täten. Hier wird ein Konzept von IOC entwickelt, das auch als DI bezeichnet wird. Die chinesische Bedeutung lautet „Abhängigkeitsinjektion“, auch „Umkehrung der Kontrolle“ genannt. Nur wenn Sie es verstehen, können Sie die Prinzipien verstehen Frühling.
Das Folgende simuliert wirklich die Implementierung von Spring, die ein bisschen einem Factory-Muster ähnelt. Mit Spring können wir verschiedene Objekte zur Verwendung zusammenstellen.
Schauen Sie sich zunächst die Konfigurationsdatei Beans.xml an
<beans> <bean id="u" /> <bean id="userService" > <property name="userDAO" bean="u"/> </bean> </beans>
eine Fabrikmethode
package com.wwj.spring; öffentliche Schnittstelle BeanFactory { public Object getBean(String name);
Eine Klasse, die XML-Dateien analysiert und BeanFactory implementiert
package com.wwj.spring; import java.util.HashMap; import java.util.Map; import org.jdom.Element ; import org.jdom.input.SAXBuilder; öffentliche Klasse ClassPathXmlApplicationContext implementiert BeanFactory{ //Definieren Sie einen Container zum Speichern von Objekten private Map<String,Object> Beans = new HashMap<String, Object>(); public ClassPathXmlApplicationContext() throws Exception{ SAXBuilder sb = new SAXBuilder(); Document doc = sb.build (this .getClass().getClassLoader().getResourceAsStream("beans.xml")); doc.getRootElement(); //Den Wurzelknoten abrufen list = root.getChildren("bean"); //Alle Elemente mit dem Namen bean for(int i = 0; i < list.size(); i++) { Element element = (Element) list.get(i); String id = element.getAttributeValue("id"); //Den ID-Wert abrufen String cla = element.getAttributeValue("class"); o = Class.forName(cla).newInstance(); System.out.println(id,o); for(Element propertyElement : (List<Element> )element.getChildren("property")){ String name = propertyElement.getAttributeValue("name"); //UserDAO String bean = propertyElement.getAttributeValue("bean"); //u Object beanObject = Beans.get(bean);//UserDAOImpl-Instanz //Fügen Sie den Methodennamen zusammen und implementieren Sie die setUserDAO-Methode String methodName = "set" + name.substring(0 , 1) .toUpperCase() + name.substring(1); System.out.println("method name = " + methodName); //Verwenden Sie den Reflexionsmechanismus, um das Methodenobjekt zu erhalten. Methode m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]); m.invoke(o, beanObject); die Methode} } } @Override public Object getBean(String name) { return Beans.get("id");
Lass uns einen Testkurs machen
package com.wwj.service; import org.junit.Test; import com.wwj.spring.BeanFactory; import com.wwj.spring.ClassPathXmlApplicationContext; Autor wwj * */ public class UserServiceTest { @Test public void testAdd() throws Exception{ BeanFactory beanFactory = new ClassPathXmlApplicationContext(); UserService service =(UserService)beanFactory.getBean("userService");
Wir können einige Hinweise aus der Testklasse sehen. Definieren Sie zunächst ein BeanFactory-Objekt, um seine getBean-Methode auszutauschen, um das Geschäftslogik-Klassenobjekt zu erhalten Gehen Sie rein. Natürlich wird hier nicht das Einfügen in die Datenbank implementiert, sondern lediglich das Testen. Tatsächlich ist der gesamte Prozess sehr klar. Die Kernkonfigurationsdatei von Spring steuert das Objekt, wenn es in die Serviceklasse eingefügt wird. Die Serviceklasse kann die Objekte der DAO-Schicht verwenden, um datenbankbezogene Aufgaben auszuführen Operationen.
Das Obige ist der online zusammengestellte Inhalt der Frühlingskonfiguration. Ich hoffe, dass er für alle hilfreich sein kann.