功能: 定一一个字符串数组,每个元素都是一个类的全限定名(包名+类名),把这些类的实例注册到Spring 容器。
一、定义要注册的类:
package cn.edu.tju.service;import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;import java.util.Date;public class DemoService {public String getTime(){return "now is " + new Date().toLocaleString();}
}
package cn.edu.tju.service;public class TestService {
}
二、自定义ImportSelector实现ImportSelector,实现selectImports方法:
package cn.edu.tju.config;import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.stereotype.Component;public class MyImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[]{"cn.edu.tju.service.DemoService", "cn.edu.tju.service.TestService"};}
}
selectImports方法返回的就是要注册的类的全限定名。
三、在配置类中导入MyImportSelector
package cn.edu.tju.config;import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;import java.io.IOException;
import java.io.Reader;import static org.apache.ibatis.io.Resources.getResourceAsReader;@Configuration
@Import(MyImportSelector.class)
public class MyConfig {}
四、在容器中获取通过MyImportSelector注册的bean
package cn.edu.tju;import cn.edu.tju.mapper.StudentMapper;
import cn.edu.tju.service.DemoService;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;@SpringBootApplication
public class Start {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(Start.class, args);String[] beanDefinitionNames = context.getBeanDefinitionNames();for(String str: beanDefinitionNames){//System.out.println(str);}DemoService demoService = context.getBean(DemoService.class);System.out.println(demoService.getTime());}
}