@Import注解---导入资源
发布日期:2021-05-07 21:35:55 浏览次数:9 分类:技术文章

本文共 3158 字,大约阅读时间需要 10 分钟。

在应用中,有时没有把某个类注入到IOC容器中,但在运用的时候需要获取该类对应的bean,此时就需要用到@Import注解。

例子如下:

先创建两个类,不用注解注入到IOC容器中,在应用的时候在导入到当前容器中。 

1:创建Man和Woman类

Man类:

package com.github.springbootdemo.demo;public class Man {}

Woman类:

package com.github.springbootdemo.demo;public class Woman {}

2、在启动类中需要获取Man和Woman对应的bean,需要用注解@Import注解把Man和Woman的bean注入到当前容器中。

package com.github.springbootdemo;import com.github.springbootdemo.demo.Man;import com.github.springbootdemo.demo.Woman;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.context.annotation.Import;@SpringBootApplication/** * 把用到的资源导入到当前容器中 */@Import({Man.class,Woman.class})public class SpringbootDemoApplication {    public static void main(String[] args) {        ConfigurableApplicationContext context = SpringApplication.run(SpringbootDemoApplication.class,args);        System.out.println(context.getBean(Man.class));        System.out.println(context.getBean(Woman.class));        context.close();    }}

3、运行该启动类,输出结果:

com.github.springbootdemo.demo.Man@1dcca8d3com.github.springbootdemo.demo.Woman@5631962

从输出结果知,@Import注解把用到的bean导入到了当前容器中。

4:当隐藏掉@Import注解的时候输出的结果如下:

2018-12-26 19:53:51.905Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.github.springbootdemo.demo.Man' available  INFO 6668 	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:343)--- [           main]	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:335) 	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1101)c.g.s.SpringbootDemoApplication          	at com.github.springbootdemo.SpringbootDemoApplication.main(SpringbootDemoApplication.java:19)

另外,也可以导入一个配置类 

还是上面的Man和Woman类,现在在一个配置类中进行配置bean,然后在需要的时候,只需要导入这个配置就可以了,最后输出结果相同。

MyConfig 配置类:

package com.github.springbootdemo.demo;import org.springframework.context.annotation.Bean;public class MyConfig {    @Bean    public Man getMan(){        return new Man();    }    @Bean    public Woman getWoman(){        return new Woman();    }}

比如若在启动类中要获取Man和Woman的bean,如下使用:

package com.github.springbootdemo;import com.github.springbootdemo.demo.Man;import com.github.springbootdemo.demo.MyConfig;import com.github.springbootdemo.demo.Woman;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.context.annotation.Import;@SpringBootApplication/** * 把用到的资源导入到当前容器中 */@Import({MyConfig.class})public class SpringbootDemoApplication {    public static void main(String[] args) {        ConfigurableApplicationContext context = SpringApplication.run(SpringbootDemoApplication.class,args);        System.out.println(context.getBean(Man.class));        System.out.println(context.getBean(Woman.class));        context.close();    }}

一样可以得到上面的结果。

上一篇:Semaphore(信号量)的工作原理及实例
下一篇:vue vue-style-loader !css-loader错误

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年03月26日 15时55分17秒