@ImportResouce 和 @Import 在springboot中的使用
@Import注解可以导入类(bean会被spring容器托管),也可以导入配置类(配置类中的所有bean会被spring容器托管)
@ImportResouce注解加载XML配置文件
1、@ImportResouce有两种常用的引入方式:classpath和file,具体查看如下的例子:
classpath路径:locations={"classpath:application-bean1.xml","classpath:application-bean.xml"}
file路径:locations= {"file:d:/test/application-bean1.xml"};
如下:
@Configuration
@ImportResource({"classpath:application-bean.xml"})
public class ShiroConfig{
}
2、重点说一下@Import
springboot提供了三种Import的方式:
1、@Import注解导入
2、实现ImportSelector接口
3、实现ImportBeanDefinitionRegistrar接口
首先定义三个普通java类User.java 、Role.java、Person.java,一个配置类ImportConfig.java
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Role {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class ImportConfig {
//配置Person的bean
@Bean
public Person person(){
return new Person();
}
}
直接注入@Import注解
注解导入User、Role、ImportConfig,如下
@SpringBootApplication
@Import(value={User.class,Role.class,ImportConfig.class})
public class ImportApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(ImportApplication.class, args);
System.out.println(context.getBean(User.class));
System.out.println(context.getBean(Role.class));
System.out.println(context.getBean(Person.class));
System.out.println("=================================");
context.close();
}
}
结果打印如下:
com.sjz.lesson2.config.User@c20be82
com.sjz.lesson2.config.Role@13c612bd
com.sjz.lesson2.config.Person@3ef41c66
=================================
发现注入成功
实现ImportSelector
1、实现ImportSelector接口:
public class MyImportSelector implements ImportSelector{
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{User.class.getName(),Role.class.getName(),ImportConfig.class.getName()};
}
}
2、定义注解ImportSelectorAnnotation,导入MyImportSelector类
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(value=MyImportSelector.class)
public @interface ImportSelectorAnnotation {
}
3、java类中使用ImportSelectorAnnotation注解
@ImportSelectorAnnotation //等价于@Import(value=MyImportSelector.class)
@SpringBootApplication
//@Import(value={User.class,Role.class,ImportConfig.class})
//@Import(value=MyImportSelector.class)//等价于@Import(value={User.class,Role.class,ImportConfig.class})
@ImportSelectorAnnotation //等价于@Import(value=MyImportSelector.class)
public class ImportApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(ImportApplication.class, args);
System.out.println(context.getBean(User.class));
System.out.println(context.getBean(Role.class));
System.out.println(context.getBean(Person.class));
System.out.println("=================================");
context.close();
}
}
测试可以正常获取
实现ImportBeanDefinitionRegistrar接口
1、实现ImportBeanDefinitionRegistrar接口
public class MyBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar{
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
BeanDefinitionBuilder userBeanDefinition = BeanDefinitionBuilder.rootBeanDefinition(User.class);
registry.registerBeanDefinition(User.class.getName(), userBeanDefinition.getBeanDefinition());
BeanDefinitionBuilder roleBeanDefinition = BeanDefinitionBuilder.rootBeanDefinition(Role.class);
registry.registerBeanDefinition(Role.class.getName(), roleBeanDefinition.getBeanDefinition());
BeanDefinitionBuilder importConfigBeanDefinition = BeanDefinitionBuilder.rootBeanDefinition(ImportConfig.class);
registry.registerBeanDefinition(ImportConfig.class.getName(), importConfigBeanDefinition.getBeanDefinition());
}
}
2、定义注解BeanDefinitionRegistrarAnnotation导入MyBeanDefinitionRegistrar
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(value=MyBeanDefinitionRegistrar.class)
public @interface BeanDefinitionRegistrarAnnotation {
}
3、java类中使用BeanDefinitionRegistrarAnnotation注解
@SpringBootApplication
@BeanDefinitionRegistrarAnnotation
public class ImportApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(ImportApplication.class, args);
System.out.println(context.getBean(User.class));
System.out.println(context.getBean(Role.class));
System.out.println(context.getBean(Person.class));
System.out.println("=================================");
context.close();
}
}
备注:可以在具体类中直接使用@Import注解导入MyImportSelector和MyBeanDefinitionRegistrar,不需要使用注解
相关推荐
主要介绍了Springboot @Import 详解,仔细看了下Springboot关于@Import的处理过程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
导入CSS文件主要有两种方式: 链接式(link) 代码如下 复制代码代码如下: <link rel=”stylesheet” href=”style.css” type=”text/css”/>... 而采用@import方式,浏览器则会先装载完整个H
MyEclipse,Servlet使用@WebServlet() 报"import javax.servlet.annotation.WebServlet;"错误-附件资源
主要介绍了浅谈Spring中@Import注解的作用和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
处理css文件中 @import。递归处理css文件中的@import,自动合并为一个css文件。 Features 支持 css样式文件 支持 @import 递归处理 支持线上的import url 自动下载再合并 Usage var gulp = require('gulp'); var co...
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org....
SpringBoot(powernode) 一、第一个SpringBoot项目 二、打jar包启动测试 三、个性化banner 四、常用注解 4.1回顾spring和java的注解 4.1.1 spring标注类的注解: 4.1.2 spring标注方法的注解: 4.1.3 spring标注...
这次使用Springboot提供了的静态资源的映射方式 你可以添加一个外部文件夹并将其作为一个静态资源文件夹的映射,也就是说添加这个映射后你可以在项目中像访问静态资源文件夹一样来访问外部的文件夹。 具体代码: 在...
postcss-partial-import, 在CSS中,inline sugar @import 语句 部分导入 部分导入允许你在CSS中使用 sugar @import 语句,包括 glob -like和 Sass -like行为。 它甚至允许你将导入作为脚手架工具生成。/* before: ...
课程内容以时下最新的技术点为主线,逐步的进行展开,分别细化的讲解了SpringBoot2基础课程,SpringBoot2底层注解,SpringBoot2自动化配置,SpringBoot2请求处理,SpringBoot2高级特性和原理分析,是不可错过的...
在火狐中显示可能会有问题,大家都是程序员,改个参数就好啦 注解包含: 拦截器 , 过滤器 , 序列化 , @After , @AfterReturning , @AfterThrowing , @annotation , @Around , @Aspect , @Autowired , @Bean , @Before ,...
一个功能比较完善的管理系统,主要是新闻这一模块
三、idea以maven项目导入该项目后,发现没有maven的依赖包时,需要对每个maven module进行clear和install,并且注意maven的依赖顺序 SpringBoot开发非常美观的java博客系统(包含后台管理功能) SpringBoot开发非常...
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 注意:一个页面可以有多个page指令,除了import外,其他属性都只能出现一次。 关于errorPage以及isErrorPage. 可能发生错误的页面: <%@ ...
根据导入文件的路径和内容(使用哈希表)进行测试。 如果这种行为不是您想要的,请查看skipDuplicates选项如果您正在寻找glob或诸如导入之类的sass(前缀为partials) ,请查看 (在使用此插件)。 未修改的导入...
css和@import都是调用外部样式表的方法。 一、用法 (1)link: <link rel="stylesheet" type="text/css" href="css文件路径"/> (2)@import: 方法一(html中添加): <style type="text/css"> @import ...
非常详细的springboot与ssm项目构建,使用的环境是jdk1.8,maven3.3.9,下载解压直接import进eclipse直接使用!