Аннотации [ править ]
@Component — Аннотация для любого компонента фреймворка.
@Service — (Сервис-слой приложения) Аннотация, объявляющая, что этот класс представляет собой сервис – компонент сервис-слоя.
Сервис является подтипом класса @Component. Использование данной аннотации позволит искать бины-сервисы автоматически.
@Repository — (Доменный слой) Аннотация показывает, что класс функционирует как репозиторий и требует наличия прозрачной трансляции исключений. Преимуществом трансляции исключений является то, что слой сервиса будет иметь дело с общей иерархией исключений от Spring (DataAccessException) вне зависимости от используемых технологий доступа к данным в слое данных.
@Controller — (Слой представления) Аннотация для маркировки java класса, как класса контроллера. Данный класс представляет собой компонент, похожий на обычный сервлет (HttpServlet) (работающий с объектами HttpServletRequest и HttpServletResponse), но с расширенными возможностями от Spring Framework.
@ResponseBody — Аннотация показывает что данный метод может возвращать кастомный объект в виде xml, json.
@RestController — Аннотация аккумулирует поведение двух аннотаций @Controller и @ResponseBody
import org.springframework.stereotype.Component; @Component public class UserBean private String userName; public String getUserName() return userName; > public void setUserName(String userName) this.userName = userName; > >
@Transactional — Перед исполнением метода помеченного данной аннотацией начинается транзакция, после выполнения метода транзакция коммитится, при выбрасывании RuntimeException откатывается.
@Autowired — Аннотация позволяет автоматически установить значение поля.
@RequestMapping — Аннотация используется для маппинга урл-адреса запроса на указанный метод или класс. Можно указывать конкретный HTTP-метод, который будет обрабатываться (GET/POST), передавать параметры запроса.
@ModelAttribute — Аннотация, связывающая параметр метода или возвращаемое значение метода с атрибутом модели, которая будет использоваться при выводе jsp-страницы.
@PathVariable — Аннотация, которая показывает, что параметр метода должен быть связан с переменной из урл-адреса.
@Scope — Аннотация для установки области жизни бина: singleton (только один экземпляр бина создается для IoC контейнера; значение по умолчанию ), prototype (создается новый экземпляр бина когда приходит запрос на его создание), request (один экземпляр бина для каждого HTTP запроса ), session (один экземпляр бина для каждой сессии), globalSession (один экземпляр бина для каждой глобальной сессии)
@PostConstruct — Аннотация для метода, который будет вызван после вызова конструктора бина.
@PreDestroy — Аннотация для метода, который будет вызван перед уничтожением бина.
@Profile — Аннотация для создания профилей конфигурации проекта. Может применяться как к бинам так и к конфигурационным классам.
@Configuration public class AppConfig @Bean @Profile("dev") public DataSource devDataSource() return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.HSQL) .addScript("classpath:com/bank/config/sql/schema.sql") .addScript("classpath:com/bank/config/sql/test-data.sql") .build(); > @Bean @Profile("production") public DataSource productionDataSource() throws Exception Context ctx = new InitialContext(); return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource"); > >
Области видимости бинов [ править ]
singleton — Возвращает один и тот же экземпляр бина на каждый запрос контейнера Spring IoC (по умолчанию).
prototype — Создает и возвращает новый экземпляр бина на каждый запрос.
request — Создает и возвращает экземпляр бина на каждый HTTP запрос*.
session — Создает и возвращает экземпляр бина для каждой HTTP сессии*.
global-session — Создает и возвращает экземпляр бина для глобальной HTTP сессии*.
*Only valid in the context of a web-aware Spring ApplicationContext.
import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; @Service @Scope("prototype") public class UserService String message; public String getMessage() return message; > public void setMessage(String message) this.message = message; > >
Конфигурация, Контекст [ править ]
Контекст приложения(org.springframework.context.ApplicationContext interface):
FileSystemXmlApplicationContext: Загружает определения бинов из файла контекста который расположен в файловой системе.
ClassPathXmlApplicationContext: Ищет файл контекста в CLASSPATH.
WebXmlApplicationContext: Ищет файл контекста в веб приложении.
import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class Main public static void main(String[] args) String fileName = "spring/appServlet/servlet-context.xml"; ApplicationContext context = new FileSystemXmlApplicationContext("src/main/webapp/WEB-INF/"+fileName); UserBean bean = (UserBean) context.getBean("userBean"); bean.setUserName("alec"); System.out.println("user:"+bean.getUserName()); > >
Шаблоны компонентов [ править ]
Есть ли разница между @Component и @Service
Какая разница между аннотациями @Component и @Service и между @Repository и @Service.
Вот что я знаю о них: @Repository и @Service являются специализацией @Component. @Repository нужно ставить над классом который работает с БД. @Repository может проводить какую то работу с исключениями. @Service ставим над классом который отвечает за бизнес логику. Есть ли еще какая то разница между ними?
Отслеживать
8,984 4 4 золотых знака 19 19 серебряных знаков 28 28 бронзовых знаков
Разница между @Component, @Service, @Controller и @Repository в Spring
Прежде чем вы узнаете разницу между @Component , @Service , @Controller и @Repository в @Repository Spring, важно понять роль аннотации @Component в Spring. Во время первоначального выпуска Spring все бины используются для объявления в XML-файле. Для большого проекта это быстро становится сложной задачей, и сотрудники Spring довольно быстро распознают проблему. В более поздних версиях они обеспечивают внедрение зависимостей на основе аннотаций и конфигурацию на основе Java. В Spring 2.5 было введено внедрение зависимостей на основе аннотаций, которое автоматически сканирует и регистрирует классы как bean-компонент Spring, который аннотируется с @Component аннотации @Component . Это означает, что вы не должны объявлять этот компонент с помощью .
Теперь, когда вы знаете, что делает аннотация @Component , давайте посмотрим, что делают @Service , @Controller и @Repository . Это не что иное, как специализированная форма аннотации @Component для определенных ситуаций. Вместо использования @Component для класса контроллера в Spring MVC мы используем @Controller , which is more readable and appropriate @Controller which is more readable and appropriate .
Используя эту аннотацию, мы делаем две вещи: сначала мы объявляем, что этот класс является bean-компонентом Spring и должен создаваться и поддерживаться Spring ApplicationContext , но также мы указываем, что это контроллер в настройке MVC. Это последнее свойство используется веб-инструментами и функциями.
Например, DispatcherServlet будет искать @RequestMapping для классов, которые аннотируются с помощью @Controlle r, но не с @Component .
Это означает, что @Component и @Controller одинаковы в отношении создания bean-компонента и внедрения зависимости, но позже это специализированная форма первого. Даже если вы замените аннотацию @Compoenent , Spring может автоматически обнаружить и зарегистрировать класс контроллера, но он может работать не так, как вы ожидаете, в отношении отображения запросов. Вы можете видеть дальше,
То же самое верно для аннотаций @Service и @Repository , они являются специализацией @Component на уровне обслуживания и персистентности. @Service компонент Spring в сервисном слое должен быть аннотирован с помощью @Service вместо аннотации @Component а bean-компонент Spring в слое постоянства должен быть аннотирован с @Repositor аннотации @Repositor y.
Используя специальную аннотацию, мы ударили двух зайцев одним выстрелом. Во-первых, они обрабатываются как Spring bean, а во-вторых, вы можете задать специальное поведение, требуемое для этого слоя.
Например, @Repository’s не только помогает в конфигурировании на основе аннотаций, но также перехватывает специфичные для платформы исключения и повторно генерирует их как одно из унифицированных непроверенных исключений Spring.
Однако для этого вам также нужно объявить org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor как Spring bean в контексте вашего приложения.
Этот @Repository бина добавляет советник к любому @Repository , аннотированному @Repository так что любые специфичные для платформы исключения перехватываются и затем перебрасываются как одно из неконтролируемых исключений доступа к данным в Spring. Вы также можете увидеть Spring Framework 5: начинающий гуру на Udemy для более подробной информации.
Это также один из часто задаваемых вопросов о собеседовании в Spring и популярная концепция с точки зрения сертификации Spring. Вы найдете несколько вопросов на основе этих аннотаций и их использования в весеннем профессиональном сертификационном экзамене.
Как компонентное сканирование работает в Spring?
Начиная с Spring 2.0, Spring предоставляет и внедрение зависимостей на основе аннотаций для автоматического обнаружения и регистрации bean-компонента Spring вместо указания их в файле XML. Но он сканирует только @Component и не ищет @Controller , @Service и @Repository в целом. Они сканируются, потому что сами @Component .
Просто взгляните на определения аннотаций @Controller , @Service и @Repository :
Service spring что это
Spring Web Services нацелен на облегчение разработки SOAP-сервиса методом Сontract-Аirst, позволяя создавать легкоизменяемые web-сервисы путем манипулирования XML-настройками.
Введение
Spring Web Services (Spring-WS) — это продукт Spring-сообщества, основной целью которого является создание документоориентированных web-сервисов. Spring Web Services нацелен на облегчение разработки SOAP-сервиса методом Сontract-Аirst, позволяя создавать легкоизменяемые web-сервисы путем манипулирования XML-настройками. Продукт основан на Spring, чтопозволяет вам изпользовать такие возможности, как DI, и это будет неотъемлемой частью вашего web-сервиса.
Использовать Spring-WS можно в разных целях, но в основном потому, что находят в других SOAP-инструментах недостатки, когда дело доходит до «best practices» при реализации SOAP-сервиса. Spring-WS делает разработку «best practices» более легким. Он включает такие методологии, как WS-I basic profile, Сontract-Аirst и имеет слабую связь между «договором» и реализацией.
Возможности
- «Best Practice» как «Easy Practice»: Spring-WS делает разработку «best practices» более легким. Он включает такие методологии, как WS-I basic profile, Сontract-Аirst и имеет слабую связь между «договором» и реализацией
- Мощный маппинг: Вы можете распределять XML-запросы по объектам в зависимости от сообщения, SOAP Action заголовка или XPath выражения
- Поддержка XML API: Входящие XML-сообщения могут быть обработаны стандартным JAXP API, например, DOM, SAX, StAX, а также JDOM, dom4j, XOM или другими подобными инструментами
- Гибкий XML маршалинг: Object/XML Mapping поддерживает JAXB 1 и 2, Castor, XMLBeans, JiBX и XStream. И т.к. это отдельный модуль, вы можете его использовать также и не в web-сервисах
- Использование вашего Spring опыта: Spring-WS использует контекст Spring-приложений во всех конфигурациях, которых позволяет Spring-разработчикам увеличить скорость разработки. Также, Spring-WS напоминает архитектуру Spring MVC
- Поддержка WS-Security: WS-Security позволяет вам подписывать SOAP-сообщения, шифровать и расшифровывать их, а также проверять их подлинность
- Интеграция с Acegi Security: Реализация WS-Security в Spring Web Services обеспечивает интеграцию с Spring Security. Это означает, что вы можете использовать уже существующие ваши конфигурации
- Сборка Maven’ом: Это позволяет вам эффективно повторно использовать артефакты Spring Web Services в ваших Maven-проектах
- Лицензия Apache: Вы можете уверенно использовать Spring-WS в ваших проектах