La estructura del proyecto es la siguiente:
¿Cómo pensar? ¿Programación hacia la abstracción?
Primero echemos un vistazo a un diagrama de secuencia.
¿Qué se puede ver de lo anterior? Si eres principiante, es extraño que puedas ver qué es, así que déjalo en paz. Echemos un vistazo a la implementación específica.
Primero, cree una clase de entidad: Usuario, colóquela en el paquete del modelo.
paquete com.wwj.model; /** * Clase de entidad * @author wwj * Spring */ usuario de clase pública {nombre de usuario de cadena privada contraseña de cadena privada() {nombre de usuario de retorno} nombre de usuario público vacío (nombre de usuario de cadena) { this.username = nombre de usuario } public String getPassword() { devolver contraseña } public void setPassword(String contraseña) { this.password = contraseña;
A continuación se explica cómo programar para la abstracción. En resumen, cómo programar para la interfaz. A continuación, defina una interfaz.
paquete com.wwj.dao; import com.wwj.model.User /** * Programación orientada a la abstracción* @author wwj * Ventajas: mayor flexibilidad*/ interfaz pública UserDAO { public void save(Usuario usuario });
Se puede ver claramente que esta interfaz declara un método, el método de guardar, que tiene un parámetro Objeto de usuario. Podemos pensar que se utiliza para guardar el objeto Usuario en la base de datos.
Deje la implementación específica a la clase de implementación.
paquete com.wwj.dao.impl; import com.wwj.dao.UserDAO; import com.wwj.model.User /** *Clase de implementación de interfaz* @author wwj * */ clase pública UserDAOImpl implementa UserDAO{ @Override public void save(Usuario usuario) { System.out.println("guardar usuario");
La ventaja de esto es que si desea cambiar el entorno de la base de datos, puede definir de manera flexible diferentes códigos de base de datos.
¿Cómo llamar al método anterior? Para separar la lógica empresarial de las operaciones de la base de datos, necesitamos definir una clase de lógica empresarial.
paquete com.wwj.service; importar com.wwj.dao.UserDAO; importar com.wwj.dao.impl.UserDAOImpl; importar com.wwj.model.User /** * Clase de servicio, implementar lógica de negocios* @author wwj; * */ clase pública UserService { UserDAO privado userDAO public UserDAO getUserDAO() { return userDAO } public void; setUserDAO(UserDAO userDAO) { this.userDAO = userDAO } public void add(Usuario usuario) { this.userDAO.save(usuario);
Podemos ver, hay algo en él, ¿algo? UserDAO, ¿has visto su efecto? Sería extraño que lo hicieras. Aquí se diseña un concepto de IOC, también llamado DI. El significado chino se llama inyección de dependencia, también llamada inversión de control. Este es un concepto muy importante en Spring. Solo entendiéndolo puedes tener una buena comprensión de los principios de Spring. Primavera.
Lo siguiente realmente simula la implementación de Spring, que es un poco como un patrón de fábrica. Usando Spring, podemos ensamblar diferentes objetos para su uso.
Primero eche un vistazo al archivo de configuración beans.xml
<beans> <bean id="u" /> <bean id="userService" > <property name="userDAO" bean="u"/> </bean> </beans>
un método de fábrica
paquete com.wwj.spring; interfaz pública BeanFactory { Objeto público getBean (nombre de cadena);
Una clase que analiza archivos xml e implementa BeanFactory
paquete com.wwj.spring; importar java.lang.reflect.Method; importar java.util.HashMap; importar java.util.List; importar org.jdom.Document; ; importar org.jdom.input.SAXBuilder; la clase pública ClassPathXmlApplicationContext implementa BeanFactory{ //Definir un contenedor para almacenar objetos 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" raíz del elemento =); doc.getRootElement(); //Obtener el nodo raíz List list = root.getChildren("bean"); //Todos los elementos llamados bean for(int i = 0; i < list.size(); i++) { Elemento elemento = (Elemento) list.get(i); String id = element.getAttributeValue("id"); //Obtener el valor de id String cla = element.getAttributeValue("class"); o = Class.forName(cla).newInstance(); System.out.println(id); System.out.println(cla).put(id,o); )element.getChildren("property")){ Nombre de cadena = propertyElement.getAttributeValue("nombre"); //UserDAO String bean = propertyElement.getAttributeValue("bean"); //u Objeto beanObject = beans.get(bean);//UserDAOImpl instancia //Parchea el nombre del método e implementa el método setUserDAO String MethodName = "set" + name.substring(0 , 1) .toUpperCase() + nombre.substring(1); System.out.println("nombre del método = " + nombre del método); //Utilice el mecanismo de reflexión para obtener el objeto del método Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]); el método} } } @Override public Object getBean(String name) { return beans.get("id");
tengamos una clase de prueba
paquete com.wwj.service; importar org.junit.Test; importar com.wwj.model.User; importar com.wwj.spring.BeanFactory; importar com.wwj.spring.ClassPathXmlApplicationContext /** *Clase de prueba unitaria* @ autor wwj * */ public class UserServiceTest { @Test public void testAdd() lanza una excepción { BeanFactory beanFactory = nuevo ClassPathXmlApplicationContext(); servicio UserService =(UserService)beanFactory.getBean("userService"); usuario u = nuevo usuario();
Podemos ver algunas pistas de la clase de prueba. Primero, defina un objeto BeanFactory. Utilice este objeto para intercambiar su método getBean para obtener el objeto de clase de lógica empresarial. Luego, puede agregar el objeto de usuario a la base de datos llamando al método add. esta clase de servicio. Por supuesto, aquí no se implementa la inserción en la base de datos, pero simplemente se implementan las pruebas. De hecho, todo el proceso es muy claro: el archivo de configuración central de Spring controla el objeto cuando se va a usar, el objeto se inyecta en la clase de servicio. La clase de servicio puede usar los objetos de la capa DAO para realizar operaciones relacionadas con la base de datos. operaciones.
Lo anterior es el contenido de configuración de Spring compilado en línea. Espero que pueda ser útil para todos.