一、查看容器中的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.xml在resources目录下。
@Import,用于将第三方jar包中的类,注册到IOC容器中。
用法:
@Import({User.class, DBHelper.class}),这里的DBHelper是ch.qos.logback.core.db.DBHelper。
三、删除容器中的Bean实例
在Spring Boot中,你不能直接从IOC容器中删除一个实例,因为IOC容器管理的是实例的生命周期,包括创建和销毁。一旦容器启动,它会保持对所有管理的bean的引用,以便于调用。









![[Leetcode 216][Medium]组合总和 III--回溯(组合问题)](https://i-blog.csdnimg.cn/direct/8dada381aa1d456ba1a8aa9456a676bd.png)








![SpringSecurity Oauth2 - 密码模式完成身份认证获取令牌 [自定义UserDetailsService]](https://i-blog.csdnimg.cn/direct/fcd7962414274211992d8041b37f9976.png)
