enz*_*nzo 11 java spring spring-mvc
根据官方文件:
注释类型配置
表示一个类声明了一个或多个@Bean方法,并且可以由Spring容器处理以生成bean定义...
@Configuration类可以使用@Import注释编写,与Spring XML中的工作方式不同.因为@Configuration对象在容器中作为Spring bean进行管理.
但我也可以在没有@Import的情况下使用@Configuration注释.我已经测试了下面列出的代码,它按预期工作.那么使用@Import的目的是什么?
DispatcherServletInitializer
public class ApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { WebConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
Run Code Online (Sandbox Code Playgroud)
WebMvcConfigurerAdapter
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "package.name" })
// @Import(OptionalConfig.class)
public class WebConfig extends WebMvcConfigurerAdapter {
// ...
}
Run Code Online (Sandbox Code Playgroud)
OptionalConfig
@Configuration
public class OptionalConfig {
@Bean(name = "myClass")
public MyClass myClass() {
return new MyClass();
}
}
Run Code Online (Sandbox Code Playgroud)
服务
@Service
public class MyServiceImpl implements MyService {
@Autowired
private MyClass myClass; // yes, it works
// ...
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*cel 18
到目前为止,我们已经看到了如何将bean定义分解为多个
@Configuration类以及如何跨越@Configuration边界引用这些bean .这些场景需要为@Configurationa的构造函数提供所有类JavaConfigApplicationContext,这并不总是理想的.通常最好使用聚合方法,其中一个@Configuration类在逻辑上导入另一个类定义的bean定义.该
@Import注释就提供了这种支持,而且它是直接等同<import/>于Spring bean的XML文件中找到的元素.
http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch04s03.html
PA *_*ire 14
一个典型的用例@Import是团队开发 REST 服务并意识到他们需要一些通用配置。
每个服务都有自己的命名空间,即org.mybusiness.specific,并且其@SpringBootApplication(以及组件扫描根)从此包开始。
另一方面,公共库将其命名空间设置为org.mybusiness.common,因此将无法进行组件扫描。
因此需要使用引用公共配置类@Import(CommonConfig.class)
yix*_*ang 13
如果启用了组件扫描,则可以在不使用@Import的情况下在多个@Configuration类中拆分bean定义.您不需要将所有这些提供给应用程序上下文构造函数.我认为@Import的主要目的是为您提供一种简化多配置注册的方法,如果您想避免组件扫描(从Spring Framework 4.2开始,每个参考手册).
有关@Import用法的春季参考文档中有一个注释:
从Spring Framework 4.2开始,@ Immort还支持对常规组件类的引用,类似于AnnotationConfigApplicationContext.register方法.如果您想避免组件扫描,使用一些配置类作为明确定义所有组件的入口点,这将特别有用.
And*_*own 12
启用组件扫描后,@Import如果您对世界的看法仅限于您自己的应用程序及其包,则很难立即看到可以增加价值的地方。如果您要导入具有自己的包结构且不想组件扫描的 bean 库,那么它可以提供帮助。
您可以将此类库放在类路径中,并用于从其中@Import挑选@Configuration类。这就是为什么它通常被称为组合,因为您正在@Configuration从多个来源组合您的类。
我找到了使用@Import注释的用途。我不认为这是在用例。如果您正在使用 Spring 开发一组库,那么您可能没有SpringBootApplication. 因此,您尚未启用任何自动扫描来解析 bean。
如果在库中的配置文件中声明的 beanlibrary-a是通过依赖注入引用的,则library-b需要使用它@Import来告诉 Spring 如何解析该 bean。
正如我们所说,library-a你有这个配置文件。
@Configuration
public class ConfigurationA {
@Bean
public BeanA beanA() {
return new BeanA();
}
}
Run Code Online (Sandbox Code Playgroud)
在library-b如果你想使用你必须有这个配置文件BeanA
@Configuration
@Import(ConfigurationA.class)
public class ConfigurationB {
@Bean
public BeanB beanB(BeanA beanA) {
return new BeanB(beanA);
}
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
27823 次 |
| 最近记录: |