文章目录
- Bean的基础配置
- Bean实例化
- Bean的生命周期
- 总结
一、Bean的基础配置
1. 什么是bean? 答:Bean通常用于面向对象编程中,用于表示一个实体或一个业务逻辑的过程实现。在Spring框架中,Bean是指被Spring容器管理的对象。可以通过在Spring配置文件中配置Bean,也可以通过注解的方式将Java类声明为Bean。
2. bean的基础配置id与class
<bean id = "" class="">
id: bean的id,使用容器可以通过id值获取对应的bean,在一个容器中id值唯一,bean的唯一标识。
name: Bean的类型,即为配置的bean的全路径类名。
3.bean的作用范围scope
bean的作用范围分为两种:singleton:单例(默认),prototype:非单例
单例是:eg: 同一个bean获取两次,前后打印出来的地址值一致。
非单例:eg: 同一个bean获取两次,前后打印出来的地址值不一致。
***为什么bean的范围默认单例?***
* bean为单例的意思是在Spring的IOC容器中只会有该类的一个对象
* bean对象只有一个就避免了对象的频繁创建与销毁,达到了bean对象的复用,性能高
二、Bean的实例化
1. 什么是Bean的实例化?
答:是Spring容器创建bean对象的过程。
2. 构造方法实例化:
步骤1:准备需要被创建的类
准备一个BookDao和BookDaoImpl类
public interface BookDao {
public void save();
}
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
}
步骤2:将类配置到Spring容器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
</beans>
步骤3:编写运行程序
public class AppForInstanceBook {
public static void main(String[] args) {
ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
bookDao.save();
}
}
步骤4:类中提供构造函数测试
在BookDaoImpl类中添加一个无参构造函数,并打印一句话,观察结果。
public class BookDaoImpl implements BookDao {
public BookDaoImpl() {
System.out.println("book dao constructor is running ....");
}
public void save() {
System.out.println("book dao save ...");
}
}
运行程序,如果控制台有打印构造函数中的输出,说明Spring容器在创建对象的时候也走的是构造函数
步骤6:构造函数中添加一个参数测试
public class BookDaoImpl implements BookDao {
private BookDaoImpl(int i) {
System.out.println("book dao constructor is running ....");
}
public void save() {
System.out.println("book dao save ...");
}
}
运行程序,程序会报错,说明Spring底层使用的是类的无参构造方法。
综上所述:其实每一个类都会提供一个无参的构造函数,所以此种方式其实什么都不需要编写。(常用方式)
3. 静态工厂实例化
(1.)创建一个工厂类并且提供一个静态方法。
//静态工厂创建对象
public class OrderDaoFactory {
public static OrderDao getOrderDao(){
return new OrderDaoImpl();
}
}
(2.)在spring的配置文件application.properties中编写如下内容:
<bean id="orderDao" class="com.itheima.factory.OrderDaoFactory" factory-method="getOrderDao"/>
其中:class(工厂类的类全名) factory-method(具体工厂类中创建对象的方法名)
(3.)编写运行类,使用从IOC容器中获取bean的方法进行测试
public class AppForInstanceOrder {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
OrderDao orderDao = (OrderDao) ctx.getBean("orderDao");
orderDao.save();
}
}
4. 实例工厂与FactoryBean
(1.)创建一个Dao和DaoImol
public interface UserDao{
public void save();
}
public class UserDaoImpl implements UserDao{
public void save() {
System.out.println("user dao save...");
}
}
(2)创建一个工厂类OrderDaoFactory并提供一个普通方法,注意此处和静态工厂的工厂类不一样的地方是方法不是静态方法
public class UserDaoFactory {
public UserDao getUserDao(){
return new UserDaoImpl();
}
}
(3)编写AppForInstanceUser运行类,在类中通过工厂获取对象
public class AppForInstanceUser {
public static void main(String[] args) {
//创建实例工厂对象
UserDaoFactory userDaoFactory = new UserDaoFactory();
//通过实例工厂对象创建对象
UserDao userDao = userDaoFactory.getUserDao();
userDao.save();
}
如何使用FactoryBean?
(1)创建DaoFactoryBean的类,实现FactoryBean接口,重写接口方法。
public class AppForInstanceUser {
public static void main(String[] args) {
//创建实例工厂对象
UserDaoFactory userDaoFactory = new UserDaoFactory();
//通过实例工厂对象创建对象
UserDao userDao = userDaoFactory.getUserDao();
userDao.save();
}
(2)在Spring的配置文件中进行配置(配置bean)
<bean id="userDao" class="com.itheima.factory.UserDaoFactoryBean"/>
FactoryBean接口其实会有三个方法,分别是:
方法一:getObject(),被重写后,在方法中进行对象的创建并返回
方法二:getObjectType(),被重写后,主要返回的是被创建类的Class对象
方法三:没有被重写,因为它已经给了默认值,从方法名中可以看出其作用是设置对象是否为单例,默认true
三、Bean的生命周期
1. 什么是生命周期?
答: 从创建到消亡的整个过程。
2. bean的生命周期是什么?
答: bean对象从创建到销毁的过程。
3. 如何实现?
(1)项目中添加Dao接口、DaoImpl实现类、Service接口和ServiceImpl实现类
public interface Dao {
public void save();
}
public class DaoImpl implements Dao {
public void save() {
System.out.println("book dao save ...");
}
}
public interface Service {
public void save();
}
public class ServiceImpl implements Service{
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}
(2)resources下提供spring的配置文件(注意:配置文件在resources配置)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
</beans>
(3)编写AppForLifeCycle运行类,加载Spring的IOC容器,并从中获取对应的bean对象
public class AppForLifeCycle {
public static void main( String[] args ) {
ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
bookDao.save();
}
}
生命周期设置
-
bean创建之后,想要添加内容,比如用来初始化需要用到资源
-
bean销毁之前,想要添加内容,比如用来释放用到的资源
步骤1:添加初始化和销毁方法
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
//表示bean初始化对应的操作
public void init(){
System.out.println("init...");
}
//表示bean销毁前对应的操作
public void destory(){
System.out.println("destory...");
}
}
步骤2:配置生命周期
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>
总结
以上就是我对于IOC相关内容的分享,如有不足,感谢评论提出!!!