bean对象的手动获取和作用域以及第三方bean的声明

一、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();
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值