Разница между страницами «Работа» и «Pro Spring 4»
FireWolf (обсуждение | вклад) |
FireWolf (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
= Конфигурация XML = | |||
== context:component-scan == | |||
Дескриптор <context:component-scan> сообщает Spring о необходимости | |||
сканирования кода на предмет внедряемых бинов, аннотированных с помощью | |||
@Component, @Controller, @Repository и @Service, а также поддерживающих | |||
аннотации @Autowired и @Inject в указанном пакете (и всех eгo внутренних па | |||
кетах). В дескрипторе <context:component-scan> можно определить множество | |||
пакетов, используя в качестве разделителя запятую, точку запятой или пробел. | |||
Кроме того, для более детализированного управления этот дескриптор поддерживает | |||
включение и исключение сканирования компонентов. | |||
Также можно указать пакет для сканирования через установку атрибута base-package. | |||
Еще можно указать исключения через context:exclude-filter. | |||
= | == bean == | ||
=== bean/property === | |||
name - Имя свойства бина | |||
value - значение (простой тип) | |||
До версии 2.5: | |||
ref - ссылка на другой бин по id | |||
Применение атрибута local означает, что дескриптор ref всегда просматривает только идентификатор бина и никогда не принимает во внимание его псевдонимы: | |||
<nowiki><ref local="test"/></nowiki> | |||
Более того, определение бина должно существовать в том же самом ХМL-файле конфигурации. | |||
Пример ссылки на бин (ссылка текущий, дочерний, родительский контекст) | |||
<nowiki><ref bean="newBean"/></nowiki> | |||
Пример ссылки на бин родительского контекста | |||
<nowiki><ref parent="newBean"/></nowiki> | |||
С версии 2.5: конфигурировать можно не через property, а в самом bean так: | |||
p:<тут имя свойства>-ref="id другого бина" | |||
или так | |||
p:<тут имя свойства>="простое значение" | |||
Через SpEL: | |||
p:name = "#{injectSimpleConfig.name}" | |||
==== bean/property/map ==== | |||
Пример: | |||
<nowiki><property name="map"> | |||
<map> | |||
<entry key="v1"> | |||
<value>Hello World!</value> | |||
</entry> | |||
<entry key="refToBean"> | |||
<ref local="localBeanId"/> | |||
</entry> | |||
</map> | |||
</property></nowiki> | |||
==== bean/property/set ==== | |||
<nowiki><property name="set"> | |||
<set> | |||
<value>Hello World 1 </value> | |||
<ref local="oracle" /> | |||
</set> | |||
</property></nowiki> | |||
==== bean/property/list ==== | |||
<nowiki><property name="list"> | |||
<list> | |||
<value>Hello World!</value> | |||
<ref local="localBeanId"/> | |||
</list> | |||
</property></nowiki> | |||
=== bean/property/props === | |||
Дескриптор <props> позволяет передавать в качестве значений только String, | |||
потому что класс Properties разрешает только значения свойств типа String. | |||
Пример: | |||
<property name="props"> | |||
<props> | |||
<prop key="firstName">Sasha</prop> | |||
<prop key="secondName">V.</prop> | |||
</props> | |||
</property> | |||
=== bean/constructor-arg === | |||
До версии 3.1: | |||
constructor-arg определяет Constructor Injection. | |||
Всегда лучше применять атрибут index, чтобы избежать путаницы между параметрами. | |||
С версии 3.1: можно применять в bean выражение вида c:<свойство>=<значение> | |||
или _<digit> - как указание индекса аргумента конструктора | |||
<bean id="message" class="java.lang.String" с:_O="message"/> | |||
= | Если есть 2 конструктора с одинаковыми именами параметров, то можно указать тип | ||
<constructor-arg type="int"><value>1</value><constructor-arg> | |||
=== bean/lookup-method === | |||
Пример Method Injection: | |||
<nowiki> <bean id="abstractLookupBean" class="com.a.AЬstractLookupDemoBean"> | |||
<lookup-method name="getMyHelper" bean="helper"/> | |||
</bean></nowiki> | |||
= | = util = | ||
Пространство имен util, предоставляемое Spring, для объявления бинов, хранящих свойства коллекций. | |||
== util:map == | |||
<nowiki> <util:map id="map" map-class = "java.util.HashMap"> | |||
<entry key = "someValue"> | |||
<value>Hello World!</value> | |||
</entry> | |||
<entry key="someBean"> | |||
<ref bean="beanId"/> | |||
</entry> | |||
</util:map></nowiki> | |||
= | == util:properties == | ||
<nowiki> <util:properties id="props"> | |||
<prop key="firstName">Sasha</prop> | |||
<prop key = "secondName">V.</prop> | |||
</util:properties></nowiki> | |||
== util:set == | |||
<nowiki> <util: set id="set"> | |||
<value>Hello World!</value> | |||
<ref bean = "oracle"/> | |||
</util: set></nowiki> | |||
== util:list == | |||
<nowiki> <util:list id="list"> | |||
<value>Hello World!</value> | |||
<ref bean="oracle"/> | |||
</util:list></nowiki> | |||
= | = Кофигурация аннотациями = | ||
== @Autowired == | |||
Если указано на setter, то происходит автоматическое связывание. | |||
= | Если указано на construcor, то происходит автоматическая передача параметра, пример: | ||
@Autowired | |||
public NewConstructor (@Value ( "message") String message) { | |||
this.message = message; | |||
} | |||
Аннотация @Autowired может быть применена только к одному из методов конструкторов. | |||
== @Inject == | |||
В спринг аналогична автоматическому связыванию (JSR-299). | |||
= | == @Resource == | ||
Пример - @Resource (name = "messageProvider") указывается для поддержки автоматического связывания. (JSR-250) | |||
= | == @Value == | ||
Предназначена для определения значения, подлежащего внедрению. | |||
Свойства: | |||
@Value("32") | |||
private int age; | |||
Через SpEL: | |||
@Value("#{injectSimpleConfig.name}") | |||
Жесткое кодирование значения не является удачной идеей, т.к. его изменение влечет за собой перекомпиляцию программы. | |||
== @Service == | |||
Пример - @Service("messageRenderer") указывает, что этот бин предоставляет службы, | |||
которые могут требоваться другим бинам; в качестве параметра аннотации передается имя бина. | |||
== Spring | == @Component == | ||
@Component("injectSimpleConfig") | |||
@Service является специализацией @Component, отражающей тот факт, что аннотированный класс предоставляет бизнес-службу другим уровням внутри приложения. | |||
= Классы Spring = | |||
== StopWatch == | |||
org.springframework.util.StopWatch - этот класс очень полезный в ситуациях, когда необходимо проводить простые оценки производительности и тестировать разрабатываемые приложения. | |||
StopWatch stopWatch = new StopWatch(); | |||
stopWatch.start("demo"); | |||
for (int х = О; х < 100000; х++) { | |||
MyHelper helper = bean.getMyHelper(); | |||
helper.doSomethingHelpful(); | |||
} | |||
stopWatch.stop(); |
Версия 09:50, 11 февраля 2017
Конфигурация XML
context:component-scan
Дескриптор <context:component-scan> сообщает Spring о необходимости сканирования кода на предмет внедряемых бинов, аннотированных с помощью @Component, @Controller, @Repository и @Service, а также поддерживающих аннотации @Autowired и @Inject в указанном пакете (и всех eгo внутренних па кетах). В дескрипторе <context:component-scan> можно определить множество пакетов, используя в качестве разделителя запятую, точку запятой или пробел. Кроме того, для более детализированного управления этот дескриптор поддерживает включение и исключение сканирования компонентов. Также можно указать пакет для сканирования через установку атрибута base-package. Еще можно указать исключения через context:exclude-filter.
bean
bean/property
name - Имя свойства бина value - значение (простой тип)
До версии 2.5:
ref - ссылка на другой бин по id
Применение атрибута local означает, что дескриптор ref всегда просматривает только идентификатор бина и никогда не принимает во внимание его псевдонимы:
<ref local="test"/>
Более того, определение бина должно существовать в том же самом ХМL-файле конфигурации.
Пример ссылки на бин (ссылка текущий, дочерний, родительский контекст)
<ref bean="newBean"/>
Пример ссылки на бин родительского контекста
<ref parent="newBean"/>
С версии 2.5: конфигурировать можно не через property, а в самом bean так:
p:<тут имя свойства>-ref="id другого бина"
или так
p:<тут имя свойства>="простое значение"
Через SpEL:
p:name = "#{injectSimpleConfig.name}"
bean/property/map
Пример:
<property name="map"> <map> <entry key="v1"> <value>Hello World!</value> </entry> <entry key="refToBean"> <ref local="localBeanId"/> </entry> </map> </property>
bean/property/set
<property name="set"> <set> <value>Hello World 1 </value> <ref local="oracle" /> </set> </property>
bean/property/list
<property name="list"> <list> <value>Hello World!</value> <ref local="localBeanId"/> </list> </property>
bean/property/props
Дескриптор <props> позволяет передавать в качестве значений только String, потому что класс Properties разрешает только значения свойств типа String. Пример:
<property name="props"> <props> <prop key="firstName">Sasha</prop> <prop key="secondName">V.</prop> </props> </property>
bean/constructor-arg
До версии 3.1: constructor-arg определяет Constructor Injection. Всегда лучше применять атрибут index, чтобы избежать путаницы между параметрами.
С версии 3.1: можно применять в bean выражение вида c:<свойство>=<значение> или _<digit> - как указание индекса аргумента конструктора
<bean id="message" class="java.lang.String" с:_O="message"/>
Если есть 2 конструктора с одинаковыми именами параметров, то можно указать тип
<constructor-arg type="int"><value>1</value><constructor-arg>
bean/lookup-method
Пример Method Injection:
<bean id="abstractLookupBean" class="com.a.AЬstractLookupDemoBean"> <lookup-method name="getMyHelper" bean="helper"/> </bean>
util
Пространство имен util, предоставляемое Spring, для объявления бинов, хранящих свойства коллекций.
util:map
<util:map id="map" map-class = "java.util.HashMap"> <entry key = "someValue"> <value>Hello World!</value> </entry> <entry key="someBean"> <ref bean="beanId"/> </entry> </util:map>
util:properties
<util:properties id="props"> <prop key="firstName">Sasha</prop> <prop key = "secondName">V.</prop> </util:properties>
util:set
<util: set id="set"> <value>Hello World!</value> <ref bean = "oracle"/> </util: set>
util:list
<util:list id="list"> <value>Hello World!</value> <ref bean="oracle"/> </util:list>
Кофигурация аннотациями
@Autowired
Если указано на setter, то происходит автоматическое связывание.
Если указано на construcor, то происходит автоматическая передача параметра, пример:
@Autowired public NewConstructor (@Value ( "message") String message) { this.message = message; }
Аннотация @Autowired может быть применена только к одному из методов конструкторов.
@Inject
В спринг аналогична автоматическому связыванию (JSR-299).
@Resource
Пример - @Resource (name = "messageProvider") указывается для поддержки автоматического связывания. (JSR-250)
@Value
Предназначена для определения значения, подлежащего внедрению. Свойства:
@Value("32") private int age;
Через SpEL:
@Value("#{injectSimpleConfig.name}")
Жесткое кодирование значения не является удачной идеей, т.к. его изменение влечет за собой перекомпиляцию программы.
@Service
Пример - @Service("messageRenderer") указывает, что этот бин предоставляет службы, которые могут требоваться другим бинам; в качестве параметра аннотации передается имя бина.
@Component
@Component("injectSimpleConfig") @Service является специализацией @Component, отражающей тот факт, что аннотированный класс предоставляет бизнес-службу другим уровням внутри приложения.
Классы Spring
StopWatch
org.springframework.util.StopWatch - этот класс очень полезный в ситуациях, когда необходимо проводить простые оценки производительности и тестировать разрабатываемые приложения.
StopWatch stopWatch = new StopWatch(); stopWatch.start("demo"); for (int х = О; х < 100000; х++) { MyHelper helper = bean.getMyHelper(); helper.doSomethingHelpful(); } stopWatch.stop();