Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Строим веб-приложение на Java без JEE и Spring

Anna | 1.06.2014 | нет комментариев
Данная статья будет увлекательна тем, кто внезапно понял, что ему хочется
испробовать сделать что-то без навязанного обществом JEE и Spring.

Вы, о драгоценный Java Смельчак, не хотите быть винтиком в громадном механизме вашего Фреймворка?
Вам наскучило Ощущать себя «машинисткой» по написанию конфигов и настроек?
Вы хотите решать задачи так, как хочется вам, а не так, как это видится автору унифицированной на нужды
миллионов библиотеки?

Тогда благо пожаловать под кат, где я поделюсь с вами пригодными находками Мира без Фреймворка.

Все дело в Контейнере

Как вы помните JEE либо Spring (дальше легко Фреймворк) завлекает раньше каждого
вероятностью Контейнера в котором будут жить ваши небольшие компоненты и сервисы.
Но чай мы можем сделать его сами.

Это легко.
Создаем Контекст через тот, что доступно все, что необходимо для работы:

public class Context {

	public final DAO dao;
	public final MailService mails;
	public final AsyncService async;

	public App root;

	public Context(
			DAO dao,
			MailService mails,
			AsyncService async) {
		this.dao = dao;
		this.mails = mails;
		this.async = async;
	}

}

Создаем Контейнер, в котором будут жить все наши Сервисы:

public class App {

	public final SecurityService security;
	public final CommentService comments;
	public final UserService users;

	public App(Context c) {

		c.root = this;

		this.security = new SecurityService(c);
		this.users = new UserService(c);
		this.comments = new CommentService(c);

	}
}

В Сервисах у нас находятся бизнес-способы.
Через Контекст они сумеют получить доступ к необходимым источникам (как БД либо другие Сервисы).

Пример:

class CommentService {

	DAO dao;
	MailService mails;
	UserService users;

	public CommentService(Context c){
		dao = c.dao;
		mails = c.mails;
		users = c.root.users;
	}

	public Result getComments(Req req){

		List comments = dao.getComments(req);
		User user = users.getCurUser();
		mails.sendMail();

	}

}

Осталось только сделать один экземпляр Контейнера на всё веб-приложение:

public class SingleApp {

	private static App app;

	public static synchronized App get() {

		if(app != null) return app;

		//создаем контекст
		Context c = new Context();
		...
		//создаем контейнер
		app = new App(c);

		return app;
	}

}

И применять Сервисы из Контейнера в своей работе:

@WebServlet("/comments")
public class GetCommentsServlet extends HttpServlet {

	CommentService comments;

	public void init() {
		App app = SingleApp.get();
		comments = app.comments;
	}

	protected void doGet(HttpServletRequest req, HttpServletResponse resp) {

		List result = comments.getComments(...);

		req.setAttribute("comments", result);
		req.getRequestDispatcher("/WEB-INF/jsp/comments.jsp").forward(req, resp);
	}
}
Вывод

Двумя-тремя простейшими классами нам удалось сделать себе данные для удобной работы без Фреймворка.
Нам не потребовалось 5 мегабайт библиотек, наше решение стартует максимально стремительно (т.к. в нем есть только то,
что необходимо именно нам), его легко запустить в юнит тестах.
Но основное: мы видим каждый цикл работы приложения и можем его менять как нам вздумается.

На примере данного подхода я сотворил вот данный маленький веб-сервис. И остался доволен итогами.
Там нет JEE, там нет Spring. Но там есть всё, что мне необходимо. :)

Если данная тематика зацепит читателей, то я с удовольствием продолжу знакомить вас с миром вне Фреймворка.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB