3、IoC 之Bean概述

3、IoC 之Bean概述

3.1、Bean 命名

Bean 在容器内被封装成 BeanDefinition 类,具体内容可访问 官方文档 进行深入了解

bean命名约定为小驼峰式(如 accountManager、accountService、userDao、loginController)

通过类路径中的组件扫描,基本上采用简单的类名并将其初始字符转换为小写。但是,特殊情况下,当有多个字符并且第一个和第二个字符都是大写时,原始大小写将被保留。这些规则与java.beans.Introspector.decapitalize(Spring在这里使用的规则)所定义的规则相同。

3.2、Bean 实例化

  • 通常,容器通过反射调用bean的构造器来实例化,等效于 new
  • 在不太常见的情况下,容器调用类上的工厂方法来创建 Bean。从调用工厂方法返回的对象类型可以是同一类,也可以是完全另一个类

① 构造函数进行实例化

Bean类:

package hom.wang.vo;
public class ExampleBean {
    // ...
}

xml 定义Bean:

<beans>
    <!-- 默认调用无参构造,没有无参直接报错:No default constructor found -->
    <bean id="exampleBean" class="hom.wang.vo.ExampleBean"/>
</beans>

② 静态工厂方法进行实例化

通过 factory-method 调用静态工厂方法,返回一个 Bean 实例。

Bean类:

package hom.wang.vo;
public class ExampleBean {
    
    private static ExampleBean exampleBean = new ExampleBean();
    
    public static ExampleBean createInstance(){
        return exampleBean;
    }
}

xml 定义Bean:

<beans>
    <!-- 通过 factory-method 指定静态工厂方法 -->
    <bean id="exampleBean" class="hom.wang.vo.ExampleBean" factory-method="createInstance"/>
</beans>

③ 实例工厂方法实例化

与通过静态工厂方法进行实例化类似,实例工厂方法实例化就是bean-B通过 factory-bean 指定bean-A,再通过 factory-method 指定bean-A的静态工厂方法返回bean-B的实例

Bean类:

package hom.wang.vo;
public class BeanA {
    
    private static BeanB beanB = new BeanB();
    
    public static BeanB createBeanBInstance(){
        return beanB;
    }
}
public class BeanB {
    // ...
}

xml 定义Bean:

<beans>
    <!-- Bean-A正常创建 -->
    <bean id="beanA" class="hom.wang.vo.beanA"/>
    
    <!-- Bean-B通过Bean-A的实例工厂方法创建 -->
    <bean id="beanB"
    	factory-bean="beanA"
    	factory-method="createBeanBInstance"/>
</beans>

这种方法表明工厂bean本身可以通过依赖注入(DI)进行管理和配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纯纯的小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值