spring入门2(静态工厂和实例工厂)

一、核心概念

1、bean标签

        <bean></bean>:定义spring核心容器管理对象

        1.1、Id:可通过bean的属性ID来获取对应的bean,唯一标识
        1.2、Class:bean的类型,包名+类名(给谁造对象)
        1.3、Name:ben的别名,和属性具有相同的功能但name属性可写多个,用分号、逗号、空格分开

2、bean作用范围
        Scope:控制bean造出来的对象是不是同一个对象即单例和非单例
        2.1、Singleton单例(默认)
        2.2、Prototype非单例
3、Bean的实例化
        3.1、构造方法实例化bean:Spring创建bean对象时调用的是无参构造函数
        3.2、静态工厂实例化bean:通过新建工厂包的方式在返回值new对象

        3.3、实例工厂实例化bean:不是静态的工厂创建bean
                ①、基础性操作和静态工厂相同,实例工厂非静态
                ②、配置文件先造工厂对象再造对象(无class)        
                ③、主类中也需先new工厂对象

4、Bean的生命周期
        4.1、生命周期:从创建到消亡的完整过程
        4.2、Bean生命周期:bean(对象)从创建到销毁的整体过程
        4.3、Bean生命周期控制:在bean创建后到销毁前做的一些事情
        4.4、控制bean生命周期的两种方式

                ①、提供生命周期函数(函数+配置)

                ②、通过实现接口的方式(InitializingBean和DisposableBean)

5、Bean生命周期过程
        5.1、初始化容器
                ①、创建对象,内存分配
                ②、执行构造方法
                ③、执行属性注入(setter操作)
                ④、执行bean初始化操作
        5.2、使用bean
                ①、执行业务操作
        5.3、关闭/销毁容器
                ①、执行bean销毁方法

二、静态工厂方式创建bean

1、新建一个普通java包、类体以及接口,方便后期调用

源码:

package staticFactory;

public interface StaticFactory {
    public void save();
}
package staticFactory.Impl;

import staticFactory.StaticFactory;

public class StaticFactoryImpl implements StaticFactory {
    public void save() {
        System.out.println("通过静态工厂创建对象");
    }
}

2、新建工厂包及类体

源码:

package factory2;

import staticFactory.Impl.StaticFactoryImpl;
import staticFactory.StaticFactory;

public class StaticFactory2 {
    public static StaticFactory getStaticFactory() {
        System.out.println("这里是静态工厂");
        return new StaticFactoryImpl();
    }
}

3、 给静态工厂配置文件,在resource文件下新建spring Config,命名为:staticContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="staticBean" class="factory2.StaticFactory2" factory-method="getStaticFactory"></bean>

</beans>

id:给bean起的名字,

class:给bean配置啥类型,一般就是给谁造对象。这里指造一个工厂对象

factory-bean:工厂内的那个方法造对象

4、到这里基本上静态工厂创建bean已经完成了,接下来就是来测试一下,在test包下新建一个测试类

源码:

import factory2.StaticFactory2;
import staticFactory.StaticFactory;

public class staticFactoryTest {
    public static void main(String[] args) {
//        StaticFactory:就是需要被调用的那个接口名
//        StaticFactory2:就是工厂类名
        StaticFactory staticFactory = StaticFactory2.getStaticFactory();
        staticFactory.save();
    }
}

三、实例工厂创建bean

1、其实实例工厂和静态工厂差不多,只不过静态工厂的服务是静态的,提供的方法是static的,而实例工厂提供的方法服务是非static的,实例工厂相对比较灵活

第一步还是先创建一个被调用的包、类和方法及接口

源码:

package instanceFactory;

public interface InstanceFactory {
    public void save();
}
package instanceFactory.Impl;

import instanceFactory.InstanceFactory;

public class InstanceFactoryImpl implements InstanceFactory {
    public void save() {
        System.out.println("实例工厂创建bean--");
    }
}

2、创建一个工厂包、工厂类

源码:

package factory3;

import instanceFactory.Impl.InstanceFactoryImpl;
import instanceFactory.InstanceFactory;
public class Factory03 {
    public InstanceFactory getInstanceFactory() {
        System.out.println("这里是实例工厂--");
        return new InstanceFactoryImpl();
/*
*           这里解释一下:
*           InstanceFactory:是个接口
*           InstanceFactoryImpl:接口的实现,返回一个对象
* */
    }
}

 3、给实例工厂配置文件,在resource下新建spring Config,命名为:instanceContext.xml

源码:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="instanceBean" class="factory3.Factory03"></bean>
<!--
        factory-bean:工厂实例,就是上面一个bean的id,
        factory-method:这个工厂的方法
-->
    <bean id="instanceBean1" factory-bean="instanceBean" factory-method="getInstanceFactory"></bean>
</beans>

id:给bean起的名字

class:给bean配置对象的类型

factory-bean:工厂实例,就是创建工厂bean的id

 factory-method:这个工厂的方法

4、到这里,实例工厂创建bean基本上就完成了,接下来就是在test中测试了。在test包下新建一个InstanceFactoryTest

源码:

import factory3.Factory03;
import instanceFactory.InstanceFactory;

public class InstanceFactoryTest {
    public static void main(String[] args) {
//        实例工厂
        Factory03 factory03 = new Factory03();
        InstanceFactory instanceFactory = factory03.getInstanceFactory();
        instanceFactory.save();

    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值