A estrutura do projeto é a seguinte:
Como pensar? Programando para abstração?
Vamos dar uma olhada em um diagrama de sequência primeiro
O que pode ser visto acima? Se você é um iniciante, é estranho se você conseguir ver o que é, então deixe como está. Vamos dar uma olhada na implementação específica
Primeiro, precisamos criar uma classe de entidade: User, que é colocada no pacote model.
package com.wwj.model; /** * Classe de entidade * @author wwj * Spring */ public class User { private String nome de usuário; public String getUsername() { return nome de usuário } public void setUsername(String nome de usuário) { this.username = nome de usuário; } public String getPassword() { return password } public void setPassword (String senha) { this.password = senha;
A seguir, como programar para abstração. Resumindo, como programar para interface. A seguir, defina uma interface.
package com.wwj.dao; import com.wwj.model.User; /** * Programação orientada à abstração* @author wwj * Vantagens: maior flexibilidade*/ interface pública UserDAO { public void save(User user });
Pode-se ver claramente que esta interface declara um método, o método save, que possui um objeto User de parâmetro. Podemos pensar nele como sendo usado para salvar o objeto User no banco de dados.
Deixe a implementação específica para a classe de implementação
package com.wwj.dao.impl; import com.wwj.dao.UserDAO; import com.wwj.model.User; /** *Classe de implementação de interface* @author wwj * */ public class UserDAOImpl implementa UserDAO{ @Override public void save(Usuário usuário) { System.out.println("salvar usuário");
A vantagem disso é que, se você quiser alterar o ambiente do banco de dados, poderá definir diferentes códigos de banco de dados com flexibilidade.
Como chamar o método acima Para separar a lógica de negócios das operações de banco de dados, precisamos definir uma classe de lógica de negócios.
package com.wwj.service; import com.wwj.dao.UserDAO; import com.wwj.dao.impl.UserDAOImpl; import com.wwj.model.User; * */ public class UserService { private UserDAO userDAO; public UserDAO getUserDAO() { return userDAO } public void; setUserDAO (UserDAO userDAO) { this.userDAO = userDAO } public void add (usuário usuário) { this.userDAO.save (usuário } });
Podemos ver, há alguma coisa nele, alguma coisa? UserDAO, você viu seu efeito? Seria estranho se você visse. Um conceito de IOC, também chamado de DI, é projetado aqui. O significado chinês é chamado de injeção de dependência, também chamado de inversão de controle. Este é um conceito muito importante no Spring. Primavera.
O seguinte simula verdadeiramente a implementação do Spring, que é um pouco como um padrão de fábrica. Usando o Spring, podemos montar diferentes objetos para uso.
Primeiro dê uma olhada no arquivo de configuração beans.xml
<beans> <bean id="u" /> <bean id="userService" > <property name="userDAO" bean="u"/> </bean> </beans>
um método de fábrica
pacote com.wwj.spring; interface pública BeanFactory {objeto público getBean (nome da string);
Uma classe que analisa arquivos xml e implementa BeanFactory
pacote com.wwj.spring; importar java.lang.reflect.Method; importar java.util.HashMap; ; importar org.jdom.input.SAXBuilder; classe pública ClassPathXmlApplicationContext implementa BeanFactory{ //Definir um contêiner para armazenar objetos private Map<String,Object> beans = new HashMap<String, Object>(); public ClassPathXmlApplicationContext() throws Exception{ SAXBuilder sb = new SAXBuilder(); .getClass().getClassLoader().getResourceAsStream("beans.xml")); doc.getRootElement(); //Obter o nó raiz List list = root.getChildren("bean"); //Todos os elementos chamados bean for(int i = 0; i < list.size(); i++) { Element element = (Element) list.get(i); String id = element.getAttributeValue("id"); //Obter o valor do id String cla = element.getAttributeValue("class"); o = Class.forName(cla).newInstance(); System.out.println(id); System.out.println(cla); )element.getChildren("propriedade")){ String nome = propriedadeElement.getAttributeValue("nome"); propertyElement.getAttributeValue("bean"); //u Object beanObject = beans.get(bean);//UserDAOImpl instance //Junte o nome do método e implemente o método setUserDAO String methodName = "set" + name.substring(0 , 1) .toUpperCase() + name.substring(1); System.out.println("nome do método = " + nomedométodo); //Use o mecanismo de reflexão para obter o objeto do método Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]); o método} } } @Override public Object getBean(String nome) { return beans.get("id");
Vamos fazer uma aula teste
pacote com.wwj.service; import org.junit.Test; import com.wwj.model.User; import com.wwj.spring.BeanFactory; autor wwj * */ public class UserServiceTest { @Test public void testAdd() lança Exception{ BeanFactory beanFactory = new ClassPathXmlApplicationContext(); serviço UserService =(UserService)beanFactory.getBean("userService"); Usuário u = new User();
Podemos ver algumas dicas da classe de teste. Primeiro, defina um objeto BeanFactory. Use este objeto para trocar seu método getBean para obter o objeto de classe de lógica de negócios. Mais tarde, você pode adicionar o objeto de usuário ao banco de dados chamando o método add de. esta classe de serviço. É claro que a inserção no banco de dados não é implementada aqui, mas o teste é simplesmente implementado. Na verdade, todo o processo é muito claro. O arquivo de configuração principal do Spring controla o objeto. Quando for usado, o objeto é injetado na classe de serviço. A classe de serviço pode usar os objetos da camada DAO. operações.
O texto acima é o conteúdo da configuração do Spring compilado online. Espero que possa ser útil para todos.