La structure du projet est la suivante :
Comment penser ? Programmation vers l’abstraction ?
Jetons d'abord un coup d'œil à un diagramme de séquence
Que peut-on voir de ce qui précède ? Si vous êtes débutant, c’est bizarre si vous pouvez voir ce que c’est, alors laissez tomber. Jetons un coup d'œil à la mise en œuvre spécifique
Tout d’abord, créez une classe d’entité : utilisateur, placez-la sous le package modèle
package com.wwj.model; /** * Classe d'entité * @author wwj * Spring */ public class User { private String username; public String getUsername() { return username; { this.username = nom d'utilisateur ; } public String getPassword() { return password ; } public void setPassword (String password) { this.password = mot de passe ;
Voici comment programmer pour l'abstraction. En bref, comment programmer pour l'interface. Ensuite, définissez une interface.
package com.wwj.dao; import com.wwj.model.User; /** * Programmation orientée abstraction* @author wwj * Avantages : flexibilité accrue*/ interface publique UserDAO { public void save(User user });
On voit clairement que cette interface déclare une méthode, la méthode save, qui a un paramètre User object On peut la considérer comme étant utilisée pour sauvegarder l'objet User dans la base de données.
Laissez l'implémentation spécifique à la classe d'implémentation
package com.wwj.dao.impl; import com.wwj.dao.UserDAO; import com.wwj.model.User; /** *Classe d'implémentation d'interface* @author wwj * */ public class UserDAOImpl implémente UserDAO{ @Override public void save (Utilisateur utilisateur) { System.out.println ("enregistrer l'utilisateur" } })
L'avantage est que si vous souhaitez modifier l'environnement de la base de données, vous pouvez définir de manière flexible différents codes de base de données.
Comment appeler la méthode ci-dessus ? Afin de séparer la logique métier des opérations de base de données, nous devons définir une classe de logique métier.
package com.wwj.service; import com.wwj.dao.UserDAO; import com.wwj.dao.impl.UserDAOImpl; import com.wwj.model.User /** * Classe de service, implémente la logique métier* @author wwj; * */ public class UserService { private UserDAO userDAO; public UserDAO getUserDAO() { return userDAO } public void; setUserDAO (UserDAO userDAO) { this.userDAO = userDAO; } public void add (Utilisateur utilisateur) { this.userDAO.save (user);
On voit, il y a un truc dessus, quelque chose ? UserDAO, avez-vous vu son effet ? Ce serait étrange si vous le faisiez. Un concept d'IOC, également appelé DI, est conçu ici. Le sens chinois est appelé injection de dépendance, également appelé inversion de contrôle. C'est un concept très important dans Spring. Ce n'est qu'en le comprenant que vous pourrez avoir une bonne compréhension des principes. Printemps.
Ce qui suit simule véritablement l'implémentation de Spring, qui ressemble un peu à un modèle d'usine. En utilisant Spring, nous pouvons assembler différents objets ensemble pour les utiliser.
Jetez d’abord un œil au fichier de configuration beans.xml
<beans> <bean id="u" /> <bean id="userService" > <property name="userDAO" bean="u"/> </bean> </beans>
une méthode d'usine
package com.wwj.spring ; interface publique BeanFactory { public Object getBean (nom de la chaîne) ;
Une classe qui analyse les fichiers XML et implémente BeanFactory
package com.wwj.spring ; importer java.lang.reflect.Method ; importer java.util.HashMap ; importer java.util.List ; importer org.jdom.Document ; ; import org.jdom.input.SAXBuilder ; classe publique ClassPathXmlApplicationContext implémente BeanFactory{ //Définissez un conteneur pour stocker les objets private Map<String,Object> beans = new HashMap<String, Object>(); public ClassPathXmlApplicationContext() throws Exception{ SAXBuilder sb = new SAXBuilder(); .getClass().getClassLoader().getResourceAsStream("beans.xml")); Racine de l'élément = doc.getRootElement(); //Obtenir le nœud racine List = root.getChildren("bean"); //Tous les éléments nommés bean for(int i = 0; i < list.size(); i++) { Element element = (Element) list.get(i); String id = element.getAttributeValue("id"); //Obtenir la valeur de l'identifiant String cla = element.getAttributeValue("class"); o = Class.forName(cla).newInstance(); System.out.println(id); System.out.println(cla); beans.put(id,o); )element.getChildren("property")){ Nom de la chaîne = propertyElement.getAttributeValue("name"); //UserDAO String bean = propertyElement.getAttributeValue("bean"); //u Objet beanObject = beans.get(bean);//UserDAOImpl instance //Rassemblez le nom de la méthode et implémentez la méthode setUserDAO String methodName = "set" + name.substring(0 , 1) .toUpperCase() + nom.substring(1); System.out.println("nom de la méthode = " + nom de la méthode); //Utiliser le mécanisme de réflexion pour obtenir l'objet méthode Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]); la méthode} } } @Override public Object getBean(String name) { return beans.get("id" } }
Faisons un cours de test
package com.wwj.service ; importer org.junit.Test ; importer com.wwj.model.User ; importer com.wwj.spring.BeanFactory ; importer com.wwj.spring.ClassPathXmlApplicationContext ; author wwj * */ public class UserServiceTest { @Test public void testAdd() lance une exception{ BeanFactory beanFactory = new ClassPathXmlApplicationContext(); UserService service =(UserService)beanFactory.getBean("userService");
Nous pouvons voir quelques indices de la classe de test. Tout d'abord, définissez un objet BeanFactory. Utilisez cet objet pour échanger sa méthode getBean afin d'obtenir l'objet de classe de logique métier. Vous pourrez ensuite ajouter l'objet utilisateur à la base de données en appelant la méthode add de. cette classe de service. Bien entendu, l'insertion dans la base de données n'est pas implémentée ici, mais les tests sont simplement implémentés. En fait, l'ensemble du processus est très clair. Le fichier de configuration principal de Spring contrôle l'objet lorsqu'il doit être utilisé, l'objet est injecté dans la classe de service. La classe de service peut utiliser les objets de la couche DAO pour effectuer des tâches liées à la base de données. opérations.
Ce qui précède est le contenu de la configuration du printemps compilé en ligne. J'espère qu'il pourra être utile à tout le monde.