bean

通过同一个bean创建的对象默认是同一个

可以通过bean中的属性进行修改

为什么bean默认是单例的?

    对于spring来说,管理的bean放在容器中,如果不是单例的,则需要用一个造一个,太庞大了

spring管理的是可以复用的bean:

  表现层对象

  业务层对象

  数据层对象

  工具对象

不适合交给容器管理的bean:

  封装实体的域对象

bean是如何创建出来的:

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

实例化bean的三种方式:

    1.空参构造

  2.通过静态工厂

  工厂类

package org.example.factory;

import org.example.dao.BookDao;
import org.example.dao.impl.BookDaoImpl;

public class getBookDao {
    public  static BookDao getBookDao(){
        System.out.println("factory setup....");
        return new BookDaoImpl();
    }
}

配置

<bean id="bookDao" class="org.example.factory.getBookDao" factory-method="getBookDao"/>

  3.示例工厂初始化对象

工厂类

package org.example.factory;

import org.example.dao.BookDao;
import org.example.dao.impl.BookDaoImpl;

public class getBookDao {
    public  BookDao getBookDao(){
        System.out.println("factory setup....");
        return new BookDaoImpl();
    }
}

配置:需要先把工厂类实例化 在调用其对象

<bean id="bookDao" class="org.example.factory.getBookDao"/>
<bean  id="bookDao2" factory-method="getBookDao" factory-bean="bookDao"/>

 

   第三种方式的变形-----FactoryBean:

package org.example.factory;

import org.example.dao.BookDao;
import org.example.dao.impl.BookDaoImpl;
import org.springframework.beans.factory.FactoryBean;

public class bookFactoryBean implements FactoryBean<BookDao> {
    @Override
    public BookDao getObject() throws Exception {
        return new BookDaoImpl();
    }

    @Override
    public Class<?> getObjectType() {
        return BookDao.class;
    }
}
<bean id="bookDao2" class="org.example.factory.bookFactoryBean"/>

 

 

 

 

Bean的生命周期:

 配置:

<bean id="bookDao" class="org.example.dao.impl.BookDaoImpl" init-method="init" destroy-method="destroy"/>

ClassPathXmlApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
bookDao.save();
//ctx.close();//比较暴力 不能放在创建对象前
ctx.registerShutdownHook();//可以放在创建对象前

第一种:

第二种:

bean生命周期的流程:

posted @ 2023-02-15 20:36  会秃头的小白  阅读(31)  评论(0编辑  收藏  举报