IOC核心理论

1.实体Bean的构建

a.基于Class构建

b.构造方法构建

c.静态工厂方法创建

d.FactoryBean创建

2.1.基于Class构建

<bean class="com.tuling.spring.HelloSpring"/>

这是最常见的方法,其原理是在spring底层会基于class属性通过反射进行构建

2.2.构造方法构建

<bean class="com.tuling.spring.HelloSpring">

    <constructor-arg name="name" type="java.lang.String" value="tuling"/>

    <constructor-arg index="1" type="java.lang.String" value="sex" />

</bean>

如果需要基于参数构建,就采用构造方法构建,其对应属性如下:

name:构造方法参数变量名称

type:参数类型

index:参数索引,从0开始

ref:引用容器的其它对象

2.3.静态工厂方法创建

<bean class="com.tuling.spring.HelloSpring" factory-method="build">

    <constructor-arg name="type" type="java.lang.String" value="B"/>

 </bean>

此方法就是在一个HelloSpring类里定义一个build静态方法,通过参数不同返回不 同对象。

如果你正在对一个对象进行A/B测试,就可以采用静态工厂方法的方式创建,基于策略创建不同的对象或填充不同的属性。

该模式下必须创建一个静态工厂方法,并且方法返回该实例,spring会调用该静态方法创建对象

2.4.FactoryBean创建

<bean id="driver" class="com.tuling.spring.DriverFactoryBean">

    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306"/>

</bean>

指定一个Bean工厂来创建对象,对象构建初始化完全交给该工厂来实现,配置Bean时指定该 工厂类的类名。

要定义一个实现了FactoryBean接口的对象,实现该接口的方法。

 

3.bean的基本特性

a.作用范围

b.生命周期

c.装载机制

3.1.作用范围

3.2.生命周期

3.3.加载机制

4.依赖注入

试想IOC中如果没有依赖注入,那这个框架就只能帮助我们构建一些简单的Bean,而 之前说的复杂Bean的构建问题将无法解决,Spring这个框架不可能 会像现在这样成功。spring中ioc如何依赖注入呢。有以下几种方式 

a.set方法注入

b.构造方法注入

c.自动注入(byName,byType)

d.方法注入(looup-method)

4.1.set方法注入

<bean class="com.tuling.spring.HelloSpring">

     <property name="find" ref="fineSpring"/>

</bean>

4.2.构造方法注入

<bean class="com.tuling.spring.HelloSpring">

     <constructor-arg name="fine">

              <bean class="com.tuling.spring.FineSpring"/>

     </constructor-arg>

</bean>

4.3.自动注入(byName\byType\constructor)

<bean id="helloSpringAutowireConstructor" class="tuling.spring.HelloSpring" autowire="byName"/>

byName:基于变量名与bean名相同作为依据插入

byType:基于变量类别与bean名称作为依据插入

constructor:基于IOC中bean与构造方法进行匹配(语义模糊,不推荐)

4.4.依赖方法注入(lookup-method)

当一个单例的Bean,依赖于一个多例的Bean,用常规方法只会被注入一次,如果每次都想要获取一个全新实例就可以采用lookup-method方法来实现 。

该操作的原理是基于动态代理技术,重新生成一个继承至目标类,然后重写抽象方法达到注入目的。抽象方法FineSpring是由spring框架实现。

前面所说单例Bean依赖多例Bean这种情况也可以通过实现ApplicationContextAware、BeanFactoryAware接口来获取BeanFactory实例,从而可以直接调用getBean方法获取新实例,推荐使用该方法,相比lookup-mehtod语义逻辑更清楚一些。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值