Bean的管理(获取,作用域,第三方Bean)

发布时间:2023年12月18日

目录

Bean的获取:

根据name获取bean:Object getBean(String name)

根据类型获取bean: T getBean(Class requiredType)

根据name获取bean(带类型转换):

T aetBean(String name,Class requiredType)

Bean的作用域:

singleton容器内同 名称的 bean 只有一个实例 (单例) (默认)

prototype每次使用该 bean 时会创建新的实例 (非单例)

注意事项默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)prototype的bean,每一次使用该bean的时候都会创建一个新的实例。实际开发当中,绝大部分的Bean是单例的,也就是说绝大部分Bean不需要配置scope属性。

@Bean


Bean的获取:

默认情况下,Sprin项目启动时,会把bean都创建好放在10C容器中,如果想要主动获取这些bean,可以通过如下方式:

根据name获取bean:
Object getBean(String name)

(bean的名字在默认情况下是类名是字母小写)

SomeBean someBean = (SomeBean) applicationContext.getBean("someBean");
 

这里需要强转是因为用get方法获取到的bean是object类型的。


根据类型获取bean:
<T> T getBean(Class<T> requiredType)

SomeBean someBean = applicationContext.getBean(SomeBean.class);
 


根据name获取bean(带类型转换):

<T> T aetBean(String name,Class<T> requiredType)

SomeBean someBean = applicationContext.getBean("someBean", SomeBean.class);
 

Bean的作用域:

singleton
容器内同 名称的 bean 只有一个实例 (单例) (默认)

prototype
每次使用该 bean 时会创建新的实例 (非单例)

request
每个请求范围内会创建新的实例 (web环境中,了解)

session
每个会话范围内会创建新的实例 (web环境中,了解)

application
每个应用范围内会创建新的实例 (web环境中,了解)

scope:用于设置Bean的作用域!!!

注意事项
默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)
prototype的bean,每一次使用该bean的时候都会创建一个新的实例。
实际开发当中,绝大部分的Bean是单例的,也就是说绝大部分Bean不需要配置scope属性。

@Bean

可以将第三方引入类交给IOP容器管理

@Configuration
public class AppConfig {

    @Bean
    public SomeBean someBean() {
        return new SomeBean();
    }

    @Bean
    public AnotherBean anotherBean() {
        return new AnotherBean();
    }
}
 
文章来源:https://blog.csdn.net/m0_71149935/article/details/135061246
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。