SpringIOC 容器(进阶)

SpringIOC 容器

一、Bean 的自动装配

1、手动装配

手动的在bean 标签中设置name 等属性,也就是一些子标签需要自己手动的设置

<constructor-arg></constructor-arg>
<property></property>
<!--============================手动装配子标签属性=====================================-->
<bean id="ControllerImpl" class="com.apesource.controller.ControllerImpl">
        <property name="serviceimpl" ref="serviceimpl"></property>
</bean>

<bean id="student" class="com.apesource.pojo.Student">
        <constructor-arg name="name" value="111"></constructor-arg>
        <constructor-arg name="age" value="21"></constructor-arg>
</bean>

2、自动装配

(1)语法
  • autowire = “属性值” ----------> bean标签---->局部设置
  • default-autowire = “属性值” ------------>beans标签—>全局设置
(2)属性
  • byName------------->通过set方法按照名称自动装配,属性名称与 bean 的 id 相匹配

  • byType------------->通过set方法按照类型自动装配,属性类型与 bean 的 class 相匹配

  • constructor-------->通过构造方法按照自动装类型配,属性类型与 bean 的 class 相匹配

  • no

(3)注意
  1. 如果全局、局部均设置了自动装配,则按照就近原则
  2. 大型项目不建议使用,自动装配的可读性比较低
  3. 自动装配一般只装配 JavaBean

二、bean 的实例化

1、通过类的无参构造方法实例化(默认)

就是将类放入spring容器中,然后用反射的方式加载类,在通过类的无参构造方式实例化对象

(1)在主配置文件中加载类,即将类放入spring容器里

<bean id="ControllerImpl" class="com.apesource.controller.ControllerImpl">
        <property name="serviceimpl" ref="serviceimpl"></property>
</bean>

(2)通过获取容器对象,使用 ==grtBean()==方法获取指定类的对象

// 获取容器对象
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("application.xml");
// 获取指定类的对象(实例化对象)
Student student= (Student) applicationContext.getBean("student");
Controller controller= (Controller) applicationContext.getBean("controllerImpl");
controller.save();
System.out.println(student);

2、通过指定工厂创建对象

就是spring容器将创建对象的控制权交给一个指定工厂

(1)在主配置文件中加载类,即将类放入spring容器里,以及将工厂也注入到容器里

<bean id="student" class="com.apesource.pojo.Student" factory-bean="factory" factory-method="creatStu"></bean>
<bean id="factory" class="com.apesource.factory.BeansFactory"></bean>

3、通过指定静态工厂创建对象

只是将工厂中的方法改为静态方法

三、bean的生命周期

  1. 实例化
  2. 属性赋值
  3. 初始化
    • 接口初始化 InitializingBean
    • 属性初始化init-method
  4. 操作使用
  5. 销毁
    • 接口销毁 DisposableBean
    • 属性销毁 destory-method

四、bean的作用域

可以主动设置 bean 作用域,通过 scope = “属性”

属性:

  • singleron --------------> 单例、性能较高,但安全性较低(单例是指不管调用多少次 getBean()方法,都只会创建一次实例

  • prototype ---------------> 多例,性能较低,但安全性高(多例是指调用一次 getBean()方法,就会创建一次实例

    web 环境下

  • request --------------> 一个请求创建一个JavaBean

  • session ----------------> 一个会话创建一个javaB

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Kⅈꫛᧁ269

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

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

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

打赏作者

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

抵扣说明:

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

余额充值