admin 管理员组

文章数量: 887031

Bean、

bean的别名

name 中间可以使用逗号,分号,空格分隔以达到起多个名字的目的

 <bean  id= "bookDao" name="service service2" class="com.itheima.dao.impl.BookDaoImpl"/>

bean创建对象默认是单例模式 (scope="singleton")

创建对象的地址是相同的

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

可以通过配置scope="prototype"修改

    <bean  id= "bookDao" name="service service2" class="com.itheima.dao.impl.BookDaoImpl" scope="prototype"/>

适合单例模式:

表现层对象

业务层对象

数据层对象

工具对象

不适合单例模式:

封装实体的域对象

实例化Bean的三种方式

1.使用构造方法创建实例化bean

public class BookDaoImpl implements BookDao {public BookDaoImpl() {System.out.println("new Bean");}public void save() {System.out.println("BookDao save!");}
}

 修改构造方法报错

public class BookDaoImpl implements BookDao {public BookDaoImpl(int i) {System.out.println("new Bean");}public void save() {System.out.println("BookDao save!");}
}

2、使用静态工厂

静态工厂

public class OrderDaoFactory{public static OrderDao getOrderDao(){return new OrderDaoImpl();}}

 配置:

<bean id="orderDao"factory-method="getOrderDao"
class="com.itheima.factory.OrderDaoFactory"/>
   public static void main(String[] args) {ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");BookDao bookDao = (BookDao) applicationContext.getBean("BookDao");bookDao.save();}

3、使用实例工厂实例化bean

实例工厂

public class OrderDaoFactory {public  BookDaoImpl getOrderDao(){return new BookDaoImpl();}
}

配置

 <bean id="userFactory" class="com.itheima.factory.OrderDaoFactory"/><bean  id= "bookDao" class="com.itheima.dao.impl.BookDaoImpl" scope="singleton" factory-method="getOrderDao" factory-bean="userFactory"></bean>

4、FactoryBean的方式

FactoryBean:

public class UserDaoFactoryBean implements FactoryBean {//代替原始实例工厂中创建对象的方法public Object getObject() throws Exception {return new BookDaoImpl();}public Class<?> getObjectType() {return BookDao.class;}
}

 配置

<bean id="bookDao1" class="com.itheima.factory.UserDaoFactoryBean"/>

 

  public static void main(String[] args) {ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");BookDao bookDao = (BookDao) applicationContext.getBean("BookDao1");bookDao.save();}

bean的生命周期

一、在配置文件中设置生命周期的三个方法

public class BookDaoImpl implements BookDao {public void save() {System.out.println("BookDao save!");}//表示bean初始化public  void init(){System.out.println("初始化");}//表示bean销毁前对应的操作public void destory(){System.out.println("销毁");}
}

 需要在配置中配置这些方法

    <bean  id= "bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"></bean>

在退出虚拟机之前关闭容器

1. 使用close()方法,较为暴力

    public static void main(String[] args) {//获取ioc容器ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");//获取beanBookDao bookDao = (BookDao) ctx.getBean("bookDao");bookDao.save();BookService bookService = (BookService) ctx.getBean("bookService");bookService.save();ctx.close();}
}

2.设置关闭钩子

 public static void main(String[] args) {//获取ioc容器ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");ctx.registerShutdownHook();//获取beanBookDao bookDao = (BookDao) ctx.getBean("bookDao");bookDao.save();BookService bookService = (BookService) ctx.getBean("bookService");bookService.save();}

二、继承 InitializingBean, DisposableBean接口重写方法

public class BookServiceImpl implements BookService, InitializingBean, DisposableBean {private BookDao bookDao ;public void save() {System.out.println("BookService save!");}//提供对应的set方法public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;System.out.println("set!");}public void destroy() throws Exception {System.out.println("销毁");}public void afterPropertiesSet() throws Exception {System.out.println("初始化");}
}

初始化容器:

1.创建对象(内存分配)

2.执行构造方法

3.执行属性注入

4.执行bean的初始化方法

本文标签: Bean