С ES5 + (любой просматриваемый в настоящее время - 2017) вы должны иметь возможность делать
[].forEach.call(document.getElementsByClassName('answer'), function(el) {
el.style.color= 'red';
});
Я не уверен, что вы можете явно исключить пакеты с помощью фильтра & lt; exclude-filter & gt ;, но я уверен, что использование фильтра регулярных выражений эффективно приведет вас туда:
<context:component-scan base-package="com.example">
<context:exclude-filter type="regex" expression="com\.example\.ignore\..*"/>
</context:component-scan>
Чтобы сделать его аннотацией, вы должны аннотировать каждый класс, который вы хотели исключить для тестов интеграции, с чем-то вроде @ com.example.annotation.ExcludedFromITests. Тогда компонент-сканирование будет выглядеть так:
<context:component-scan base-package="com.example">
<context:exclude-filter type="annotation" expression="com.example.annotation.ExcludedFromITests"/>
</context:component-scan>
Это понятно, потому что теперь вы сами документировали в самом исходном коде, что класс не предназначен для включения в контекст приложения для тестов интеграции.
Кажется, вы сделали это через XML, но если вы работали в новой лучшей практике Spring, ваша конфигурация была бы на Java, и вы могли бы исключить их так:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "net.example.tool",
excludeFilters = {@ComponentScan.Filter(
type = FilterType.ASSIGNABLE_TYPE,
value = {JPAConfiguration.class, SecurityConfig.class})
})
Я использую @ComponentScan
следующим образом для одного и того же варианта использования. Это то же самое, что и ответ XMLSchro10's XML, но в этом используются аннотации. Оба используют фильтр с type=AspectJ
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration;
import org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration;
import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ImportResource;
@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.example" },
excludeFilters = @ComponentScan.Filter(type = FilterType.ASPECTJ, pattern = "com.example.ignore.*"))
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
FilterType.REGEX
для этого подхода
– ThanksForAllTheFish
29 July 2016 в 14:54
FilterType.REGEX
. Может быть, ответ может быть обновлен, чтобы отразить это?
– Adam
28 December 2017 в 19:23
Я думаю, вы должны реорганизовать свои пакеты в более удобной иерархии, поэтому они не входят в базовый пакет.
Но если вы не можете этого сделать, попробуйте:
<context:component-scan base-package="com.example">
...
<context:exclude-filter type="regex" expression="com\.example\.ignore.*"/>
</context:component-scan>
Здесь вы можете найти другие примеры: Использование фильтров для настройки сканирования
Вы также можете использовать @SpringBootApplication , который, согласно документации Spring, выполняет те же функции, что и следующие три аннотации: @Configuration, @EnableAutoConfiguration @ComponentScan в одной аннотации.
@SpringBootApplication(exclude= {Foo.class})
public class MySpringConfiguration {}
Это работает весной 3.0.5. Итак, я бы подумал, что это будет работать в 3.1
<context:component-scan base-package="com.example">
<context:exclude-filter type="aspectj" expression="com.example.dontscanme.*" />
</context:component-scan>
Кажется, что для меня это работает:
@ComponentScan(basePackageClasses = {SomeTypeInYourPackage.class}, resourcePattern = "*.class")
Или в XML:
<context:component-scan base-package="com.example" resource-pattern="*.class"/>
Это переопределяет значение по умолчанию resourcePattern
, которое является "**/*.class"
.
Казалось бы, это самый безопасный тип для ТОЛЬКО включает ваш базовый пакет, поскольку этот ресурсPattern всегда будет таким же и относительно вашего базового пакета.
Для Spring 4 я использую следующее (я отправляю его, поскольку вопрос 4 года, и больше людей используют Spring 4, чем Spring 3.1):
@Configuration
@ComponentScan(basePackages = "com.example",
excludeFilters = @Filter(type=FilterType.REGEX,pattern="com\\.example\\.ignore\\..*"))
public class RootConfig {
// ...
}