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

  • 相关阅读:
    springboot springcloud zuul 过滤器
    springboot springcloud eureka 熔断器
    javaweb servlet filter
    maven nexus 搭建私服(二)
    springboot springcloud zuul 网关入门
    springboot springcloud 配置中心
    springboot springcloud eureka 入门
    java rabbitmq
    java jvm调优
    maven nexus 搭建私服(一)
  • 原文地址:https://www.cnblogs.com/hfultrastrong/p/8621450.html
Copyright © 2011-2022 走看看