SpringBoot2:IOC容器的相关操作以及常用注解说明

一、查看容器中的Bean实例

查看springboot中的容器实例,首先,我们要获取到IOC容器。

        //1、返回我们的IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);

        //2、查看容器里面的组件
        String[] names = run.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }

这个获取实例的具体实现类是:org.springframework.beans.factory.support.DefaultListableBeanFactory
其内部,有很多关于容器实例的获取方式
在这里插入图片描述

二、向容器中注册Bean实例

我们知道,在springmvc中,向IOC容器中注册实例的方式有两种
1、xml配置文件里面通过bean标签实现向容器中注册Bean实例。
2、通过扫描注解标注的类,来实现向容器中注册Bean实例。

springboot中,已经不建议使用xml配置文件,那么,该如何向IOC容器中注册组件了?

1、扫描注解方式

启动类加上扫描路径

@SpringBootApplication(scanBasePackages = "com.atguigu.boot")
或者
@ComponentScan("com.atguigu.boot")

那么,在这个包路径下,加上springboot定义的注解类,都会注册到容器中
如:@Bean、@Component、@Controller、@Service、@Repository

这种方式,在springmvc中,对应的配置如下

	<!-- 开启注解 -->
    <context:annotation-config></context:annotation-config>
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
    
	<!-- 扫描文件 -->
	<mvc:annotation-driven/>
	<context:component-scan base-package="com.kfc" >
		<!--扫描serveice等注解的类-->
         <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
         <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" />
         <context:include-filter type="annotation" expression="org.springframework.stereotype.Component" />
        <!--排除Controller,Controller由springmvc加载-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
	</context:component-scan>

2、@Configuration配置类方式

这个注解标注的类,就相当于以前的xml配置文件。

  • 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的,实例名默认是方法名
    在这里插入图片描述
  • 2、配置类本身也是组件
    即上图中的MyConfig类,也是IOC容器中的组件
  • 3、proxyBeanMethods:是否代理bean的方法
    • @Configuration(proxyBeanMethods = false),建议默认配置true即可。
    • Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
    • Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
    • 组件依赖必须使用Full模式。其他默认选择Lite模式

3、@Conditional条件装配方式

在这里插入图片描述
这个注解,有很多子注解。
当条件满足什么情况时,就向容器中注册组件。
比如:当容器中没有A实例的时候,就向容器中注册一个A实例。这样,可以节省JVM内存空间。

注意:这个注解一般配合@Configuration标注的配置类上使用。也可以用在任何一个组件类上
如:@ConditionalOnMissingBean(name = "tom")IOC中没有tom实例,就注册一个该实例。

4、@ImportResource和@Import方式

@ImportResource,可以将眼前的xml配置中配置的bean,注册到IOC中。方便对以前的springmvc升级。
@ImportResource("classpath:beans.xml"),其中beans.xmlresources目录下。


@Import,用于将第三方jar包中的类,注册到IOC容器中。
用法:
@Import({User.class, DBHelper.class}),这里的DBHelperch.qos.logback.core.db.DBHelper

三、删除容器中的Bean实例

Spring Boot中,你不能直接从IOC容器中删除一个实例,因为IOC容器管理的是实例的生命周期,包括创建和销毁。一旦容器启动,它会保持对所有管理的bean的引用,以便于调用。

四、用法总结

其实,我们平时开发,最关心的就3个方面:

1、自己写的类,我们怎么注册到IOC容器中?
这个,我们用配置类或者包扫描的方式实现。

2、第三方jar包的类,我们怎么注册到IOC容器中?
使用@Import注解实现。

3、以前的springmvc中,xml配置的组件,如何导入到springbootIOC容器中?
使用@ImportResource注解实现。

  • 19
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值