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
版权声明:本文标题:Bean、 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1687280377h84523.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论