Структура проекта следующая:
Как думать? Программирование в сторону абстракции?
Давайте сначала посмотрим на диаграмму последовательности
Что можно увидеть из вышесказанного? Если вы новичок, странно, если вы видите, что это такое, поэтому оставьте это в покое. Давайте посмотрим на конкретную реализацию
Во-первых, нам нужно создать класс сущности: Пользователь, который размещается в пакете модели.
package com.wwj.model; /** * Класс сущности * @author wwj * Spring */ public class User { имя пользователя частной строки; пароль частной строки; getUsername() { return username; } public void setUsername(String username) { this.username = имя пользователя; } public String getPassword () {возврат пароля; } public void setPassword (String пароль) { this.password = пароль } }
Ниже описано, как программировать для абстракции. Короче говоря, как программировать для интерфейса. Далее определим интерфейс.
package com.wwj.dao; import com.wwj.model.User; /** * Абстракционно-ориентированное программирование* @author wwj * Преимущества: повышенная гибкость*/ публичный интерфейс UserDAO { public void save(User user });
Хорошо видно, что этот интерфейс объявляет метод save, который имеет параметр User object. Мы можем думать о нем как о сохранении объекта User в базе данных.
Оставьте конкретную реализацию классу реализации
package com.wwj.dao.impl; import com.wwj.dao.UserDAO; import com.wwj.model.User /** *Класс реализации интерфейса* @author wwj * */ public class UserDAOImpl реализует UserDAO{ @Override public; void save (пользователь-пользователь) { System.out.println («сохранить пользователя» } });
Преимущество этого заключается в том, что если вы хотите изменить среду базы данных, вы можете гибко определять различные коды базы данных.
Как вызвать указанный выше метод. Чтобы отделить бизнес-логику от операций с базой данных, нам необходимо определить класс бизнес-логики.
package com.wwj.service; import com.wwj.dao.UserDAO; import com.wwj.dao.impl.UserDAOImpl; import com.wwj.model.User; /** * Класс сервиса, реализация бизнес-логики* @author wwj * */ общественный класс UserService {частный UserDAO userDAO; общественный UserDAO getUserDAO () { return userDAO } public void; setUserDAO (UserDAO userDAO) { this.userDAO = userDAO } public void add (пользователь пользователя) { this.userDAO.save (пользователь) };
Мы видим, там что-то есть, что-то? UserDAO, ты видел его эффект. Было бы странно, если бы ты это сделал. Здесь разработана концепция IOC, также называемая DI. В китайском значении она называется внедрением зависимостей, также называемой инверсией управления. Это очень важная концепция в Spring. Только поняв ее, вы сможете хорошо понять принципы работы. Весна.
Следующее действительно моделирует реализацию Spring, которая немного похожа на фабричный шаблон. Используя Spring, мы можем собирать различные объекты для использования.
Сначала взгляните на файл конфигурации beans.xml.
<beans> <bean id="u" /> <bean id="userService" > <property name="userDAO" bean="u"/> </bean> </beans>
фабричный метод
пакет com.wwj.spring общедоступный интерфейс BeanFactory {общественный объект getBean (имя строки);
Класс, который анализирует XML-файлы и реализует BeanFactory.
пакет com.wwj.spring; импорт java.util.HashMap; импорт java.util.Map; импорт org.jdom.Element; ; import org.jdom.input.SAXBuilder; открытый класс ClassPathXmlApplicationContext реализует BeanFactory{; //Определение контейнера для хранения объектов Private Map<String,Object> beans = new HashMap<String, Object>(); public ClassPathXmlApplicationContext() выдает исключение {SAXBuilder sb = new SAXBuilder(); Document doc = sb.build (this) .getClass().getClassLoader().getResourceAsStream("beans.xml")); doc.getRootElement(); //Получаем корневой узел List list = root.getChildren("bean"); //Все элементы с именем bean for(int i = 0; i < list.size(); i++) { Element element = (Element) list.get(i); String id = element.getAttributeValue("id"); //Получаем значение идентификатора String cla = element.getAttributeValue("class"); //Получаем значение класса Object o = Class.forName(cla).newInstance(); System.out.println(id); System.out.println(cla); beans.put(id,o); for(Element propertyElement: (List<Element> )element.getChildren("свойство")){ String name = propertyElement.getAttributeValue("name"); //UserDAO String bean = propertyElement.getAttributeValue("bean"); //u Object beanObject = beans.get(bean);//UserDAOImpl экземпляр //Соединяем имя метода и реализуем метод setUserDAO String MethodName = "set" + name.substring(0 , 1) .toUpperCase() + name.substring(1); System.out.println("имя метода = " + имя_метода); //Используем механизм отражения для получения объекта метода Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]); //Вызов метод} } } @Override public Object getBean(String name) { return beans.get("id" } });
Давайте проведем тестовый урок
пакет com.wwj.service; импорт com.wwj.model.User; импорт com.wwj.spring.BeanFactory; импорт com.wwj.spring.ClassPathXmlApplicationContext; /** * Класс модульного теста* @ автор wwj * */ public class UserServiceTest { @Test public void testAdd() выдает исключение { BeanFactory beanFactory = новый ClassPathXmlApplicationContext (); служба UserService = (UserService) beanFactory.getBean («userService»); u = new User ();
Мы можем увидеть некоторые подсказки в тестовом классе. Сначала определите объект BeanFactory. Используйте этот объект для обмена его методом getBean для получения объекта класса бизнес-логики. Позже вы можете добавить объект пользователя в базу данных, вызвав метод add. этот класс обслуживания. Конечно, здесь не реализована вставка в базу данных, а просто реализовано тестирование. Фактически, весь процесс очень понятен. Основной файл конфигурации Spring управляет объектом. Когда он должен использоваться, объект вводится в класс обслуживания. Класс обслуживания может использовать объекты уровня DAO для выполнения операций, связанных с базой данных. операции.
Выше приведено содержимое конфигурации Spring, скомпилированное в Интернете. Надеюсь, оно будет полезно всем.