Как я ввожу единственное значение свойства в строку, использующую пружину 2.5.x?

В общем, селекторы идут в следующем порядке эффективности (от самой высокой до наименее эффективной):

  • ID
  • Класс
  • Имя тега
  • [ 1123] Дочерние отношения (foo > bar)
  • Потомковые отношения (foo bar)
  • Атрибут (foo[bar="baz"])
  • Псевдоклассы (foo:hover, [116 ])

Другое соображение заключается в том, что CSS-селекторы - это, по сути, поиск по дереву, поэтому чем больше вы можете вырезать из дерева, тем лучше. #foo .bar - это отношение потомков, но если включение #foo исключит большую часть вашего HTML из поиска, это сделает этот селектор более эффективным. Точно так же img[data-src] теоретически будет быстрее, чем [data-src], потому что есть более ограниченный набор элементов, атрибут которых необходимо проверить.

(Я не знаю этого наверняка, но ожидаю, что правила CSS не всегда интерпретируются в строгом порядке справа налево. #foo .bar, например, будет более эффективным если интерпретировать слева направо: сначала ищите элемент ID, тогда вам нужно только проверить его дочерние элементы на .bar вместо поиска по всему документу. Я бы предположил, что очевидные оптимизации производительности, подобные этой, уже встроены в большинство или во все браузеры. engine.)

Есть также некоторые случаи, когда вы можете заменить методы javascript для правил css, такие как $('foo:nth-child(1)') vs $('foo').first() - в этом конкретном случае jQuery быстрее , хотя это конечно, не распространяется на все селекторы (поскольку для них нет соответствующих методов).

Если вы сомневаетесь, вы можете сравнить этот тип материала, просто повторно выполнив выделение (в соответствии с вашим настоящим HTML) в цикле:

benchmark = function(selector) {
  var t1 = new Date();
  for (var i=0; i<100000; i++) {
      var x = $(selector);
  }
  var t2 = new Date();

  console.log(selector, t2-t1, "ms")
}

benchmark('[data-src="bar"]')
benchmark('img[data-src="bar"]')

[1138 ]

... результаты которого подводят меня к моей главной точке: преждевременной оптимизации.

В большинстве случаев, с большинством веб-страниц, это мало что меняет в реальном мире. С очень простым HTML выше, селектор почти не имеет значения даже при 100 000 итерациях. На 10 000 итераций я даже не получаю последовательных результатов, из которых быстрее.

Если вы работаете с относительно большими деревьями HTML и сложными селекторами и начинаете видеть реальные проблемы с производительностью, которые, как вы подозреваете, связаны с этими поисками DOM, , тогда это хорошая идея, чтобы начать тестирование такого рода вещей. (Хотя даже тогда, большую часть времени вы увидите больше улучшений от кэширования и повторного использования предыдущих выборов, чем от тонкой настройки самих выборов.)

Используйте здравый смысл, старайтесь, чтобы ваши селекторы были простыми и понятными. укажите, и используйте их, когда это возможно, но, вероятно, не стоит потеть каждую миллисекунду, если вы не видите реальных проблем с производительностью.

6
задан ivan.a.bovin 15 November 2012 в 10:57
поделиться

4 ответа

Существует поток об этом на форуме Spring. Короткий ответ - то, что нет действительно никакого способа ввести единственное свойство с помощью аннотаций.

Я услышал, что поддержка использования аннотаций будет улучшена в Spring 3.0, таким образом, будет вероятно, что это будет скоро обращено.

4
ответ дан 8 December 2019 в 17:29
поделиться

Вы могли попытаться ввести значение свойства "my.service.url" к зарегистрированному в Вашем бобе.

Смотрите на: http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-factory-placeholderconfigurer

HTH.

-2
ответ дан 8 December 2019 в 17:29
поделиться

можно сделать это при использовании конфигурации XML. Просто настройте PropertyPlaceholderConfigurer и укажите значение свойства в конфигурации

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>classpath:com/foo/jdbc.properties</value>
    </property>
</bean>
<bean ...>
  <property name="myServiceUrl" value="${my.service.url}"/>
</bean>
0
ответ дан 8 December 2019 в 17:29
поделиться

Я знаю, что с момента публикации исходного сообщения прошло некоторое время, но мне удалось наткнуться на решение этой проблемы для spring 2.5.x

Вы можете создавать экземпляры "String" beans в конфигурация spring xml, которая затем может быть введена в аннотированные компоненты

@Component
public class SomeCompent{
  @Autowired(required=true 
  @Resource("someStringBeanId")
  private String aProperty;

  ...
}

<beans ....>
   <context:component-scan base-package="..."/>

  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    ...
  </bean>
  <bean id="someStringId" class="java.lang.String" factory-method="valueOf">
    <constructor-arg value="${place-holder}"/>
  </bean>
</beans>
7
ответ дан 8 December 2019 в 17:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: