我们需要提及一下bean的销毁时机:(了解即可)
- 因为默认情况下 , 我们的bean不会被销毁 , 因为虚拟机会直接退出 , ClassPathXmlApplicationContext会被忽略销毁过程
所以如果我们希望销毁bean观察到destroy的实现 , 需要手动关闭:
- 手动关闭容器方法:
package com.itheima; import com.itheima.dao.BookDao; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class AppForLifeCycle { public static void main( String[] args ) { // 注意:这里需要采用ClassPathXmlApplicationContext作为对象 , 因为只有这个类才具有close方法 ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); BookDao bookDao = (BookDao) ctx.getBean("bookDao"); bookDao.save(); //关闭容器 ctx.close(); } }
- 注册关闭钩子 , 在虚拟机退出前先关闭容器再推出虚拟机
package com.itheima; import com.itheima.dao.BookDao; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class AppForLifeCycle { public static void main( String[] args ) { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); BookDao bookDao = (BookDao) ctx.getBean("bookDao"); bookDao.save(); //注册关闭钩子函数 , 在虚拟机退出之前回调此函数 , 关闭容器 ctx.registerShutdownHook(); } }
最后我们统计一下整体生命周期: 初始化容器:创建对象(分配内存)->执行构造方法->执行属性注入(set操作)->执行bean初始化方法使用bean:执行业务操作关闭/销毁容器:执行bean销毁方法依赖注入方式
首先我们要知道类中传递数据的方法有两种:
- 普通方法(Set方法)
- 构造方法
然后我们要知道数据的类型大体分为两种:
- 引入类型(数据层)
- 简单类型(基本数据类型和String)
所以我们把依赖注入方式分为四种:
- setter注入简单类型引用类型
- 构造器注入简单类型引入类型
首先我们需要在bean种定义简单类型属性并提供可以访问的set方法
package com.itheima.dao.impl; import com.itheima.dao.BookDao; public class BookDaoImpl implements BookDao { private String databaseName; private int connectionNum; //setter注入需要提供要注入对象的set方法 public void setConnectionNum(int connectionNum) { this.connectionNum = connectionNum; } //setter注入需要提供要注入对象的set方法 public void setDatabaseName(String databaseName) { this.databaseName = databaseName; } public void save() { System.out.println("book dao save ..."+databaseName+","+connectionNum); } }
然后在配置中使用property标签value属性注入简单类型数据
setter注入引用类型
首先我们需要在bean种定义引用类型属性并提供可以访问的set方法
package com.itheima.service.impl; import com.itheima.dao.BookDao; import com.itheima.dao.UserDao; import com.itheima.service.BookService; public class BookServiceImpl implements BookService{ private BookDao bookDao; private UserDao userDao; //setter注入需要提供要注入对象的set方法 public void setUserDao(UserDao userDao) { this.userDao = userDao; } //setter注入需要提供要注入对象的set方法 public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; } public void save() { System.out.println("book service save ..."); bookDao.save(); userDao.save(); } }
然后在配置中使用property标签ref属性注入引用类型数据
构造器注入简单类型(了解)
在bean中定义简单类型属性并提供可访问的set方法
public class BookDaoImpl implements BookDao{ private int connectionNumber; pubilc void setConnectionNumber(int connectionNumber){ this.connectionNumber = connectionNumber; } }
配置中使用constructor-arg标签value属性注入简单类型数据
根据构造方法参数名称注入
构造器注入引用类型(了解)在bean中定义引用类型属性并提供可访问的构造方法
public class BookDaoImpl implements BookDao{ private BookBao bookBao; pubilc void setConnectionNumber(int connectionNumber){ this.bookBao = bookBao; } }
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 柠檬水什么时候喝最好 柠檬水什么时候喝好
- 我想念你(我想念你的句子)
- 黄子韬|黄子韬徐艺洋见家长疑同居,还不承认恋情,再怎么嘴硬都无济于事
- 完美日记|这届双11,完美日记为啥“隐身”了?
- 玄奘有什么身世 ? 玄奘的身世
- 手机导航究竟哪个更好用 手机导航哪个好用
- 指甲白色月牙变少,指甲的月牙白越来越多-
- 戴尔台式机评测 戴尔台式机
- 绿松石|绿松石与藏族金轮
- |艺术家徐耀——淡雅脱俗 赏心悦目