zoukankan      html  css  js  c++  java
  • spring框架中的@Import注解

    spring框架中的@Import注解

    Spring框架中的@Import注解

    在之前的文章中,作者介绍了Spring JavaConfig. 这是除了使用传统的XML文件之外,spring带来的新的选择。同样作者列出了作为Java Config一部分的annotations.如果你是spring的新手,这里也有大量的关于springspring 4的资料索引。

    在列表中,@Import 是被用来整合所有在@Configuration注解中定义的bean配置。这其实很像我们将多个XML配置文件导入到单个文件的情形。@Import注解实现了相同的功能。本文会介绍使用@Import注解来导入spring工程中的JavaConfig文件.

    在下面的例子中,我创建了两个配置文件,然后导入到主配置文件中。最后使用主配置文件来创建context.

    代码

    Car.java
    package javabeat.net.basic;
    public interface Car {
        public void print();
    }
    Toyota.java
    
    package javabeat.net.basic;
    import org.springframework.stereotype.Component;
    @Component
    public class Toyota implements Car{
        public void print(){
            System.out.println("I am Toyota");
        }
    }
    Volkswagen.java
    package javabeat.net.basic;
    import org.springframework.stereotype.Component;
    @Component
    public class Volkswagen implements Car{
        public void print(){
            System.out.println("I am Volkswagen");
        }
    }
    JavaConfigA.java
    
    package javabeat.net.basic;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class JavaConfigA {
        @Bean(name="volkswagen")
        public Car getVolkswagen(){
            return new Volkswagen();
        }
    }
    JavaConfigB.java
    
    package javabeat.net.basic;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class JavaConfigB {
        @Bean(name="toyota")
        public Car getToyota(){
            return new Toyota();
        }
    }
    ParentConfig.java
    
    package javabeat.net.basic;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Import;
    
    @Configuration
    @Import({JavaConfigA.class,JavaConfigB.class})
    public class ParentConfig {
        //Any other bean definitions
    }
    ContextLoader.java
    
    package javabeat.net.basic;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class ContextLoader {
        public static void main (String args[]){
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ParentConfig.class);
            Car car = (Toyota)context.getBean("toyota");
            car.print();
            car = (Volkswagen)context.getBean("volkswagen");
            car.print();
            context.close();
        }
    }

    程序执行输出
    I am Toyata
    I am Volkswagen

    总结

    本文作者介绍了@Import注解的使用。这个注解帮助我们将多个配置文件(可能是按功能分,或是按业务分)导入到单个主配置中,以避免将所有配置写在一个配置中。

    @Import注解
    @Import注解就是之前xml配置中的import标签,可以用于依赖第三方包中bean的配置和加载
    在4.2之前只支持导入配置类
    在4.2,@Import注解支持导入普通的java类,并将其声明成一个bean

    1. public class DemoService {  
    2.     public void doSomething(){  
    3.         System.out.println("ok");  
    4.     }  
    5.   
    6. }  
    1. import org.springframework.context.annotation.Configuration;  
    2. import org.springframework.context.annotation.Import;  
    3.   
    4. @Configuration  
    5. @Import(DemoService.class)//在spring 4.2之前是不不支持的  
    6. public class DemoConfig {  
    7.   
    8. }  

    运行

    1. import org.springframework.context.annotation.AnnotationConfigApplicationContext;  
    2.   
    3. public class Main {  
    4.     public static void main(String[] args) {  
    5.         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com..example");  
    6.         DemoService ds = context.getBean(DemoService.class);  
    7.         ds.doSomething();  
    8.     }  
    9.   
    10. }  

    输出结果
    ok

  • 相关阅读:
    git版本回退:git reset --hard 版本号
    cheerio中文文档
    疫情实时大数据报告(利用nodejs)
    Package.json 属性说明
    11 个Chrome骚技巧让你为所欲为
    vue刷新页面空白分两种情况
    修改i输入框中placeholder的样式
    input输入框显示不全是用省略号...代替
    PC端适应屏幕分辨率
    CSS设置滚动条样式
  • 原文地址:https://www.cnblogs.com/hfultrastrong/p/8621450.html
Copyright © 2011-2022 走看看