手动获取Bean对象
ApplicationContext是Spring中的IOC容器对象,通过@Autowired注解获取该方法后可以通过其中的getBean方法手动获取Bean对象。
获取IOC容器对象
@Autowired
private ApplicationContext applicationContext;
调用getBean方法获取BEan对象
如果使用的是仅使用类名首字母小写的方式获取的Bean对象的话,得到的是一个Object类型的对象,需要强转为所需要的对象。
Service1 service11=applicationContext.getBean("service1",Service1.class);//通过类名首字母小写和类型注入Bean对象
Service1 service11=(Service1) applicationContext.getBean("service1");//通过类名首字母小写注入Bean对象
Service1 service11=applicationContext.getBean(Service1.class);//通过类型注入Bean对象
Bean的初始化和注 入
Bean的作用域
如果使用上面的方法连续多次获取同一类型的实例对象,你会发现它们实际上就是同一个实例对象。
实际上,Bean的作用域有五种类型
singleton | 单例模式,容器内同一名称的Bean只有一个实例(默认) |
---|---|
prototype | 每次使用Bean时创建一个新的实例 |
request | 在每一个请求范围中创建一个新的实例(Web环境中) |
session | 在每一个会话范围中创建一个新的实例(Web环境中) |
application | 在每一个应用范围中创建一个新的实例(Web环境中) |
可以在Bean上通过@Scope注解设置Bean的作用域
@Scope("prototype")
@Service
public class Service2 implements MyService{
}
Bean的装载时间
默认单例模式情况下,Bean会在项目启动时加载并注入IOC容器中,可以通过@Lazy注解让Bean在第一次使用时才被加载。
@Lazy
@Service
public class Service2 implements MyService{
}
第三方Bean
当需要的Bean对象不是我们自定义的,此时我们无法通过@Component及它的三个衍生注解声明Bean对象,此时我们需要用到@Bean注解。
@Configuration
public class CommonConfig {
@Bean
public String st(){
return new String();
}
}