一、bean的获取
1、获得IOC容器对象
@Autowired
private ApplicationContext appContext;
2、根据IOC对象提供的方法获取//返回值为Object类型,需要强转
- 根据bean的名称获取(名称默认为首字母小写的类名)
appContext.getBean("bean名");
- 根据bean的类型获取(类名.class)
appContext.getBean(类名.class);
- 根据bean的名称以及类型获取
appContext.getBean("bean名",类名.class);
二、bean的作用域
默认情况下, Spring项目启动时,会把bean都自动创建好放在IOC容器中,
但会受到作用域以及延迟初始化影响,这里主要针对的是默认单例非延迟加载的bean而言,实际开发中绝大多数bean都是单例的,不需要配置作用域
作用域 | 说明 |
---|---|
singleton | 容器内同 名称 的bean只有一个实例(单例)(默认) |
prototype | 每次使用该 bean 时会创建新的实例(非单例) |
request | 每个请求范围内会创建新的实例(web环境中,了解) |
session | 每个会话范围内会创建新的实例(web环境中,了解 |
application | 每个应用范围内会创建新的实例(web环境中,了解) |
配置作用域
@Scope("作用域")
延迟初始化
将创建bean这步操作由项目启动时,延迟到第一次使用时创建
@Lazy
三、第三方bean
在使用dom4j等第三方框架时,只能每次都需要创建新的对象,也无法使用@Component等注解来创建bean交给IOC容器管理,为此可以就需要使用 @Bean注解来声明bean.
使用方法一(建议):
定义一个配置类,对声明第三方bean集中管理配置
一、通过@Configuration注解声明一个配置类
二、定义返回值为目标类的方法,return该类对象。在该方法上使用注解@Bean
代码示例如下:
@Configuration
public class CommonConfig {
//将当前方法的返回值对象交给IOC容器管理,成为IOC容器bean
@Bean
public SAXReader saxReader(){
return new SAXReader();
}
@Bean
public JSONObject jsonObject(){
return new JSONObject();
}
}
使用方法二(不建议):
在启动类定义一个返回值为目标类的方法,return一个new 对象。在该方法上使用注解@Bean,代码示例:
@SpringBootApplication
@ServletComponentScan
public class TliasApplication {
public static void main(String[] args) {
SpringApplication.run(TliasApplication.class, args);
}
//使用@Bean声明dom4j框架的一个工具类的bean对象
@Bean
public SAXReader saxReader(){
return new SAXReader();
}
@Bean
public JSONObject jsonObject(){
return new JSONObject();
}
}
可以使用@Bean提供的name/value属性来指定bean名,一般不指定,默认是启动类中的对应方法名
如果第三方bean依赖其他bean对象,也只需直接在bean的定义方法中设置形参列表传入要注入的bean的类型,容器会根据类型自动装配
示例:
@Bean
public SAXReader saxReader(DeptService deptService){
return new SAXReader();
}
@Bean
public JSONObject jsonObject(EmpService empService){
return new JSONObject();
}