码迷,mamicode.com
首页 > 编程语言 > 详细

spring 学习 22 @Import注解的使用

时间:2020-03-20 22:20:38      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:learn   简介   src   ann   rtb   gap   not   就是   cto   

@Import注解的简介

 @Import注解的作用:把类注册进spring IOC容器,采用的方式构造注入(默认构造器)

在spring 4.2以前,Import注解中的可以导入的类只有三种 

一、被@Configuration注解标注的类

二、ImportBeanDefinitionRegistrar接口的实现类

三、ImportSelector接口的实现类

 

在spring 4.2之后,普通的java类也可以被@Import注解导入到Spring IOC容器,现在@Import注解可以导入任何的类了,具体做分类就可以分成具体四种

一、普通java类

二、被@Configuration注解标注的类

三、ImportBeanDefinitionRegistrar接口的实现类

四、ImportSelector接口的实现类

在这篇博客中,只介绍前两种。

一、普通java类

下面是普通的java类

package com.spring.learn.bean;

import org.springframework.beans.factory.annotation.Value;

import lombok.Data;

@Data
public class DataSource {
    @Value("${username}")
    private String user;
    
    @Value("${password}")
    private String password;
    @Value("${url}")
    private String url;
    
    public DataSource() {
        System.out.println("DataSource的默认初始化器");

    }

}

 

 

 

package com.spring.learn.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;

import com.spring.learn.bean.DataSource;

@Configuration
@Import(value= {DataSource.class})//导入DataSource
@PropertySource("classpath:application.properties")
public class ImportTestConfig {

}

 

 

在Spring IOC容器中发现DataSource被注入了

package com.spring.learn.importMain;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.spring.learn.bean.DataSource;
import com.spring.learn.config.ImportTestConfig;

public class ImportAnnotationMain {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext2 = new AnnotationConfigApplicationContext(
                ImportTestConfig.class);
        String[] definitionNames = applicationContext2.getBeanDefinitionNames();
        for (String name : definitionNames) {
            System.out.println(name);
        }
        
        DataSource dataSource=applicationContext2.getBean(DataSource.class);
        System.out.println(dataSource);
    }
}

运行结果

技术图片

 

二、@Configuration注解标注的类

如果@Import类中的是被@Configuration注解标注的类(配置类),配置类会被注入到Spring IOC容器中的,同时配置类中的配置信息也会被加入到Spring容器中

下面配置类的信息:这个配置类会扫描com.zhang包及其子包

package com.spring.learn.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.zhang")
public class ScanConfig3 {

}

 

导入@Configuration类

package com.spring.learn.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import(value= {ScanConfig3.class})//导入配置类
public class ImportTestConfig {

}

 

运行测试

package com.spring.learn.importMain;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.spring.learn.config.ImportTestConfig;

public class ImportAnnotationMain {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext2 = new AnnotationConfigApplicationContext(
                ImportTestConfig.class);
        String[] definitionNames = applicationContext2.getBeanDefinitionNames();
        for (String name : definitionNames) {
            System.out.println(name);
        }
        
        
    }
}

运行结果

技术图片

 

 

userController、userDao、userService这三个bean就是在ScanConfig3配置类中的要扫描的包下的类注入的

 

spring 学习 22 @Import注解的使用

标签:learn   简介   src   ann   rtb   gap   not   就是   cto   

原文地址:https://www.cnblogs.com/cplinux/p/12534993.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!