SSM框架学习——Spring之bean学习

目录

bean基本配置

bean基础配置

bean别名配置

bean作用范围配置

bean实例化

第一种:构造方法(常用)

第二种:静态工厂

第三种:实例工厂        

第三种改良(掌握)

bean生命周期

生命周期控制方法

bean销毁时机


bean基本配置

bean基础配置

类别 描述
名称 bean
类型 标签
所属 beans标签
功能 定义Spring核心容器管理的对象
格式
 

        
        < / bean>

属性列表

id : bean的id,使用容器可以通过id值获取对应的bean,在一个容器中id值唯一

class : bean的类型,即配置的bean的全路径类名

范例

bean别名配置

类别 描述
名称 name
类型 属性
所属 bean标签
功能 定义bean的别名,可定义多个,使用逗号(,)分号( ;)空格()分隔
范例

注意事项:
获取bean无论是通过id还是name获取,如果无法获取到,将抛出异常NoSuchBeanDefinitionExceptionNoSuchBeanDefinitionException: No bean named 'XXX' available

bean作用范围配置

类别 描述
名称 scope
类型 属性
所属 bean标签

功能
 

定义bean的作用范围,可选范围如下:

singleton:单例(默认)
prototype : 非单例

范例

bean作用范围说明:

(1)为什么bean默认为单例?

        ①为了提高性能

        ②少创建实例

        ③减少垃圾回收

        ④缓存快速获取

(2)适合交给容器进行管理的bean表

        ①现层对象

        ②业务层对象

        ③数据层对象
        ④工具对象
(3)不适合交给容器进行管理的bean
        ①封装实体的域对象

bean实例化

bean本质上就是对象,创建bean使用构造方法完成。

实例化bean的三种方式:①构造方法②静态工厂③实例工厂

第一种:构造方法(常用)

①提供可访问的构造方法

public class DaoImpl1 implements Dao1 {
    public DaoImpl1(){
        System.out.println("Dao初始化..");
    }
    public void show() {
        System.out.println("Dao...");
    }
}

②配置

注意:

共有私有都可以访问到

②无参构造方法如果不存在,将抛出异常BeanCreationException

第二种:静态工厂

 ①静态工厂

public class DaoFactory {
    public static Dao1 getDao1(){
        System.out.println("Factory setup...");
        return new DaoImpl1();
    }
}

②配置


第三种:实例工厂        

①实例工厂

public class DaoFactory2 {
    public Dao1 getDao1(){
        return new DaoImpl1();
    }
}

②配置



第三种改良(掌握)

①FactoryBean

public class DaoFactoryBean implements FactoryBean {
    //代替原始实例工厂中创建对象的方法
    public Dao1 getObject() throws Exception {
        return new DaoImpl1();
    }

    public Class getObjectType() {
        return Dao1.class;
    }
    //构建bean是否为单例,true就为单例
    @Override
    public boolean isSingleton() {
        return true;
    }
}

②配置


bean生命周期

生命周期:从创建到消亡的完整过程
bean生命周期: bean从创建到销毁的整体过程

bean生命周期分段:
        ①初始化容器
                1.创建对象(内存分配)

                2.执行构造方法
                3.执行属性注入( set操作)

                4.执行bean初始化方法

        ②使用bean
                1.执行业务操作

        ③关闭/销毁容器

                1.执行bean销毁方法
bean生命周期控制︰在bean创建后到销毁前做一些事情 

生命周期控制方法

第一种:

①提供生命周期控制方法

public class DaoImpl1 implements Dao1 {
    public DaoImpl1(){
        System.out.println("Dao初始化..");
    }
    public void show() {
        System.out.println("Dao...");
    }

    //表示bean初始化进行的操作
    public void init(){
        System.out.println("init..");
    }
    public void save(){

    }
    //表示bean被销毁前对应的操作
    public void destory(){
        System.out.println("destory...");
    }
}

②配置生命周期控制方法

第二种(接口控制,不需再配置):

①实现InitializingBean, DisposableBean接口

public class ServiceImpl1 implements Service1, InitializingBean, DisposableBean {
    //删除业务层中使用new方式创建的dao对象
    private Dao1 dao1;

    @Override
    public void show() {
        System.out.println("Service...");
        dao1.show();
    }
    //提供对应的set方法
    public void setDao1(Dao1 dao1) {
        System.out.println("set...");
        this.dao1 = dao1;
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("service destroy...");
    }

    //属性配置之后运行
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("service init...");
    }
}

bean销毁时机

容器关闭前触发bean的销毁

关闭容器方式:
①手工关闭容器
        ConfigurableApplicationcontext接口close()操作

public class App{
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Dao1 dao1 = (Dao1) context.getBean("Dao1");
        dao1.show();
        context.close();  //close()放在最后
    }
}

②注册关闭钩子,在虚拟机退出前先关闭容器再退出虚拟机
        ConfigurableApplicationContext接口registerShutdownHook()操作 

public class App4 {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        context.registerShutdownHook();   //registerShutdownHook()方法放前放后都不影响使用
        Dao1 dao1 = (Dao1) context.getBean("Dao1");
        dao1.show();
        //context.registerShutdownHook(); 
    }
}

你可能感兴趣的:(SSM框架学习,spring,学习,java)