目录
根据name获取bean:Object getBean(String name)
根据类型获取bean: T getBean(Class requiredType)
T aetBean(String name,Class requiredType)
singleton容器内同 名称的 bean 只有一个实例 (单例) (默认)
prototype每次使用该 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();
}
}