Разница между страницами «Git» и «Pro Spring 4»

Материал из Home Wiki
(Различия между страницами)
Перейти к навигации Перейти к поиску
 
 
Строка 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.


= Модель flow =
== bean ==
[[Файл:Git-flow.png|Git flow]]
=== bean/property ===
= Набор команд необходимый для выполнения такого flow =
name - Имя свойства бина
1. Начало работы над какой-нибудь новой функциональностью. Создается отдельная ветка на фичу на основе develop<syntaxhighlight lang="bash">
value - значение (простой тип)
git checkout -b new-feature develop
</syntaxhighlight>


2. Добавление в очередь на коммит и коммитим внутри ветки<syntaxhighlight lang="bash">
До версии 2.5:
git add .
ref - ссылка на другой бин по id
Применение атрибута local означает, что дескриптор ref всегда просматривает только иден­тификатор бина и никогда не принимает во внимание его псевдонимы:
<nowiki><ref local="test"/></nowiki>
Более того, определение бина должно существовать в том же самом ХМL-файле конфигурации.


git commit -am "Commit message"
Пример ссылки на бин (ссылка текущий, дочерний, родительский контекст)
</syntaxhighlight>
<nowiki><ref bean="newBean"/></nowiki>
Пример ссылки на бин родительского контекста
<nowiki><ref parent="newBean"/></nowiki>
С версии 2.5: конфигурировать можно не через property, а в самом bean так:
p:<тут имя свойства>-ref="id другого бина"
или так
p:<тут имя свойства>="простое значение"
Через SpEL:
p:name = "#{injectSimpleConfig.name}"


3. Заливаем на удаленный сервер вновь созданную ветку
==== 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>


git push -u origin new-feature
==== bean/property/set ====


4. Закончив разработку переключаемся в develop и мерджим изменения.<syntaxhighlight lang="bash">
<nowiki><property name="set">
  <set>
    <value>Hello World 1 </value>
    <ref local="oracle" />
  </set>
</property></nowiki>


git checkout develop
==== bean/property/list ====


git merge --no-ff new-feature
<nowiki><property name="list">
</syntaxhighlight>
  <list>
    <value>Hello World!</value>
    <ref local="localBeanId"/>
  </list>
</property></nowiki>


5. Отправляем изменения в удаленный репозитарий<syntaxhighlight lang="bash">
=== bean/property/props ===
Дескриптор <props> позво­ляет передавать в качестве значений только String,
потому что класс Properties разрешает только значения свойств типа String.
Пример:
<property name="props">
  <props>
    <prop key="firstName">Sasha</prop>
  <prop key="secondName">V.</prop>
  </props>
</property>


git push
=== bean/constructor-arg ===
</syntaxhighlight>
До версии 3.1:
constructor-arg определяет Constructor Injection.
Всегда лучше применять атрибут index, чтобы избежать путаницы между параметрами.


6. Удаляем ветку<syntaxhighlight lang="bash">
С версии 3.1: можно применять в bean выражение вида c:<свойство>=<значение>
или _<digit> - как указание индекса аргумента конструктора
<bean id="message" class="java.lang.String" с:_O="message"/>


git branch -d new-feature
Если есть 2 конструктора с одинаковыми именами параметров, то можно указать тип
</syntaxhighlight>
<constructor-arg type="int"><value>1</value><constructor-arg>


7. Удаляем ветку и ссылку на нее в удаленном репозитарии<syntaxhighlight lang="bash">
=== bean/lookup-method ===
Пример Method Injection:
<nowiki> <bean id="abstractLookupBean" class="com.a.AЬstractLookupDemoBean">
  <lookup-method name="getMyHelper" bean="helper"/>
</bean></nowiki>


git push origin :new-feature
= 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>


git remote prune origin
== util:properties ==
</syntaxhighlight>
<nowiki> <util:properties id="props">
  <prop key="firstName">Sasha</prop>
  <prop key = "secondName">V.</prop>
</util:properties></nowiki>


8. Проставление тега у релиза и отправляем его в удаленный репозитарий<syntaxhighlight lang="bash">
== util:set ==
<nowiki> <util: set id="set">
  <value>Hello World!</value>
  <ref bean = "oracle"/>
</util: set></nowiki>


git tag -a v1.2
== util:list ==
<nowiki> <util:list id="list">
  <value>Hello World!</value>
  <ref bean="oracle"/>
</util:list></nowiki>


git push origin --tags
= Кофигурация аннотациями =
</syntaxhighlight>
== @Autowired ==
Если указано на setter, то происходит автоматическое связывание.


= Разные команды =
Если указано на construcor, то происходит автоматическая передача параметра, пример:
@Autowired
public NewConstructor (@Value ( "message") String message) {
    this.message = message;
}
Аннотация @Autowired может быть применена только к одному из мето­дов конструкторов.


<syntaxhighlight lang="bash">
== @Inject ==
git branch --merge
В спринг аналогична автоматическому связыванию (JSR-299).
</syntaxhighlight>
Посмотреть список бранчей, с которыми происходили merge'и у текущей. Полезно для поиска тех бранчей, которые нужно удалить, так как работа в них больше не ведется и все их изменения уже находятся в текущей ветке. Например посмотреть как называется ветка фичи, которую уже залили в develop.


<syntaxhighlight lang="bash">
== @Resource ==
git branch --no-merge
Пример - @Resource (name = "messageProvider") указывается для поддержки автоматического связывания. (JSR-250)
</syntaxhighlight>
Посмотреть список бранчей, с которыми у текущей не было merge'ей. Ищутся кандидаты на слияние.


<syntaxhighlight lang="bash">
== @Value ==
git fetch origin (либо имя другого репозитария)
Предназначена для определения зна­чения, подлежащего внедрению.
</syntaxhighlight>
Свойства:
Синхронизировать проект с удаленным репозитарием.
@Value("32")
private int age;
Через SpEL:
@Value("#{injectSimpleConfig.name}")


<syntaxhighlight lang="bash">
git checkout -b new-feature origin/new-feature


git checkout --track origin/new-feature
Жесткое кодирование значения не является удачной идеей, т.к. его изме­нение влечет за собой перекомпиляцию программы.
</syntaxhighlight>
Залить с удаленного сервера ветку origin/new-feature, создать локально ветку new-feature (названия могут веток могут различаться, но смысл?) и связать одну с другой. Связывание означает, что команды push и pull будут выполняться по умолчанию в/из origin/new-feature. Второй вариант создаст и привяжет локальную ветку с тем же именем, что и на удаленном сервере. Такой вариант предпочтителен.


<syntaxhighlight lang="bash">
== @Service ==
git push origin :new-feature
Пример - @Service("messageRenderer") указывает, что этот бин предоставляет службы,
</syntaxhighlight>
которые могут требоваться другим бинам; в качестве параметра аннотации передается имя бина.
Удалить ветку new-feature на удаленном сервере origin. Если работа в данной ветке законченна и она слита с основной рекомендуется удалить ветку локально и удаленно.


<syntaxhighlight lang="bash">
== @Component ==
git commit --amend
@Component("injectSimpleConfig")
</syntaxhighlight>
@Service является специализацией @Component, отражающей тот факт, что аннотированный класс предоставляет бизнес-службу другим уровням внутри приложения.
Дописать к последнему commit'у все что находится сейчас в stage. Так же можно дополнить сообщение commit'а. Удобно, когда забыл закомитить какой-нибудь конфиг из другой папки и т.п.
= Классы Spring =
 
== StopWatch ==
<syntaxhighlight lang="bash">
org.springframework.util.StopWatch - этот класс очень полезный в ситуациях, когда необходимо проводить простые оценки производительности и тестировать разрабатываемые приложения.
git remote -v
StopWatch stopWatch = new StopWatch();
</syntaxhighlight>
stopWatch.start("demo");
Показать удаленные репозитарии вместе с их URL.
for (int х = О; х < 100000; х++) {
 
  MyHelper helper = bean.getMyHelper();
<syntaxhighlight lang="bash">
  helper.doSomethingHelpful();
git remote show origin
}
</syntaxhighlight>
stopWatch.stop();
Показать подробности об удаленном репозитории origin, о всех его ветках и о локальных ветках, связанных с ними.
 
<syntaxhighlight lang="bash">
git fetch
</syntaxhighlight>
Подтянуть изменения с удаленного репозитария. Аналог svn-update
 
<syntaxhighlight lang="bash">
git push origin --tags
</syntaxhighlight>
Залить все теги на удаленный репозитарий.
 
<syntaxhighlight lang="bash">
git add
<syntaxhighlight lang="bash">
Помимо добавления измененых файлов в stage, так же используется для пометки файлов после разрешения конфликтов.
 
<syntaxhighlight lang="bash">
git checkout -- .
</syntaxhighlight>
Точка здесь путь до текущей директории. Откатить все изменения внесенные в файлы до коммита. Аналог svn-revert.
 
<syntaxhighlight lang="bash">
git config --global core.edition mcedit
</syntaxhighlight>
Сделать редактором сообщений для коммитов mcedit. Опция пременится глобально во всей системе.
 
<syntaxhighlight lang="bash">
git help <команда>
</syntaxhighlight>
Выдаст страницу справки по интересующей команде
 
<syntaxhighlight lang="bash">
git config --global alias.br branch
</syntaxhighlight>
Создать глобальный псевдоним br для команды branch. Теперь можно будет писать git br для вызова этой команды. Алиасы работают не только на простую команду, но и в принципе на любую сложную команду с ключами, настройками и т.п. Часто используемые алиасы:
 
<syntaxhighlight lang="bash">
git config --global alias.st status
 
git config --global alias.br branch
 
git config --global alias.co checkout
 
git config --global alias.ci commit
 
git config --global alias.me merge
 
git log --graph --pretty=oneline
 
git log --graph --pretty=format:'%Cred%h%Creset \-%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' \--abbrev-commit --date=relative
</syntaxhighlight>
Выведет структуру коммитов, слияний и т.д. с сообщениями.
 
<syntaxhighlight lang="bash">
git add -i
</syntaxhighlight>
Вызвать интерактивный режим работы с файлами
 
<syntaxhighlight lang="bash">
git log --summary -n1
</syntaxhighlight>
Выдаст изменения в файлах, сделанные последним коммитом
 
<syntaxhighlight lang="bash">
git log -p FILENAME
</syntaxhighlight>
Получить подробную информацию в виде патчей о каждом изменении конкретного файла ''FILENAME''
 
<syntaxhighlight lang="bash">
git reset --hard origin/develop
</syntaxhighlight>
Отмена не запушеного мёрджа с веткой ''develop''
 
<syntaxhighlight lang="bash">
git reset
 
git checkout -- .
</syntaxhighlight>
Откатить все изменнения до последнего коммита
 
<syntaxhighlight lang="bash">
git push -u origin paysys-start
</syntaxhighlight>
Создал новую ветку paysys-start и нужно залить ее на сервер, попутно привязав push и pull команды - поможет ключ -u
 
<syntaxhighlight lang="bash">
git remote prune origin
</syntaxhighlight>
Удаляет указатель на несуществующую ветку на origin
 
<syntaxhighlight lang="bash">
git diff
 
git diff HEAD
</syntaxhighlight>
Показывает разность файлов между коммитом и текущей версией бранча
 
<syntaxhighlight lang="bash">
git diff origin/master
</syntaxhighlight>
 
Показывает разность файлов между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push)
 
<syntaxhighlight lang="bash">
git diff origin/master -- paymentManager.php
</syntaxhighlight>
Показывает разность файла между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push)
 
<syntaxhighlight lang="bash">
git br -m 2nd-level-menu jdo-on-web
</syntaxhighlight>
 
Переименовать ветку
 
Пометить как улаженный
 
git checkout has the --ours option to check out the version of the file that you had locally (as opposed to --theirs, which is the version that you pulled in).
 
You can pass . to git checkout to tell it to check out everything in the tree.
 
Then you need to mark the conflicts as resolved, which you can do with git add, and commit your work once done:
 
git checkout --ours . # checkout our local version of all files
 
git add -u # mark all conflicted files as merged
 
git commit # commit the merge
 
'''Если вы работаете не в том branch'е и хотите свои изменения закоммитить в новый/другой существующий branch:'''
<syntaxhighlight lang="bash">
git stash
 
git checkout -b new-branch
 
git stash pop
</syntaxhighlight>
 
Здесь:
 
git stash - сохранить текущие незакомиченные изменения в виде патча в стек и сбросить текущую ветку до HEAD
 
git checkout -b new-branch - Создать новую ветку и переключиться в неё. Если ветку создавать не надо, убираем -b
 
git stash pop - применяем последний сохранённый патч из стека и удаляем его из стека
 
 
<syntaxhighlight lang="bash">git merge --abort</syntaxhighlight>
или
<syntaxhighlight lang="bash">git reset --hard HEAD</syntaxhighlight>
отмена конфликта во время merge, с которым вы не можете разобраться и хотите вернуть все назад
 
= Состояния файла в git =
 
[[Файл:Git-file-lifestatus.png]]
 
[[Файл:Git-local-operations.png]]
 
= Децентрализованный, но централизованный =
[[Файл:Git-decentrallized.png|Децентраллизованный]]
= Ссылки =
 
HOWTO по Git: http://githowto.com/ru
 
[[Категория:Работа]]
[[Категория:Git]]

Версия 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();