SPRING-SOURCE.RU | |
|
|
В этом примере мы создадим очень просто приложение на Spring. Оно будет включать в себя интерфейс и его реализацию, конфигурационный файл с bean-ами, и класс, который запускает наше приложение. Приступим.
public interface GreetingService { void sayGreeting(); } public class GreetingServiceImpl implements GreetingService { private String greeting; public GreetingServiceImpl(String greeting) { this.greeting = greeting; } public void sayGreeting() { System.out.println(greeting); } public void setGreeting(String greeting) { this.greeting = greeting; } }
Откуда в этом примере может взяться переменная greeting? Есть два варианта: либо она вводится через setter метод, либо через конструктор. Если так, то при смене кода программы нужно будет перекомпилировать весь проект.
Почему мы в нашем примере используем интерфейсы и их реализацию? Из-за того, что у интерфейсов можно делать много реализаций, следовательно мы можем делать разную реализацию и получать разную функциональность.
Изменять реализацию в Spring можно декларативно, то есть, конфигурацию интерфейса нужно определять в конфигурационном файле. Когда Spring запуститься он должен запустить реализацию. Давайте теперь посмотрим на наш конфигурационный файл:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="greetingService" class="com.example.GreetingServiceImpl"> <property name="greeting" value="Превед!" /> </bean> </beans>
<bean id="greetingService" class=" com.example.GreetingServiceImpl"> <constructor-arg value="Превед!" /> </bean>
Как видно, в первом случае мы определили значение бина через setter метод, а во втором в качестве оргумента в конструкторе. <property name="greeting" value="Превед!" /> в этой реализации у bean-а должен присутствовать конструктор по умолчанию.
import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; public class HelloApp { public static void main(String[] args) throws Exception { BeanFactory factory = new XmlBeanFactory(new FileSystemResource("hello.xml")); GreetingService greetingService = (GreetingService) factory.getBean("greetingService"); greetingService.sayGreeting(); } }
GreetingService greetingService = (GreetingService) factory.getBean("greetingService") – этой строкой мы создаем фабрику, грубо говоря контейнер (это один из методов). Контейнер создается на основе конфигурационного файла. Имейте ввиду, что создание контейнера – долгая процедура, поэтому в приложении лучше делать всего один контейнер. Другое дело - Bean-ы, они легковесны и их можно создавать большое количество.
Copyright © 2024 |