Eric小屋

  • bean配置
  • bean基本配置
  • bean别名配置
  • bean作用范围配置
  • Bean的实例化——构造方法
  • 构造方法实例化
  • 静态工厂实例化
  • 实例工厂与FactoryBean
  • 实例工程实例化
  • FactoryBean
  • bean的生命周期
  • bean生命周期设置
  • 首页
  • 学习笔记
    • JAVA
    • Spring
    • Node.js
    • Vue
  • 学习文档
  • 案例项目
  • 课程笔记
  • 问题解决
登录

bean

  • Eric
  • 2024-09-04
  • 0

bean配置

bean基本配置

<bean id="" class=""/>

bean标签的id和class属性的使用

bean别名配置

bean配置别名操作步骤:

1、在配置文件中,配置别名

<?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">

    <!--name:为bean指定别名,别名可以有多个,使用逗号,分号,空格进行分隔-->
    <bean id="bookService" name="service service4 bookEbi" class="com.itheima.service.impl.BookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
    </bean>

    <!--scope:为bean设置作用范围,可选值为单例singloton,非单例prototype-->
    <bean id="bookDao" name="dao" class="com.itheima.dao.impl.BookDaoImpl"/>
</beans>

2、根据名称容器中获取bean对象

public class AppForName {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //此处根据bean标签的id属性和name属性的任意一个值来获取bean对象
        BookService bookService = (BookService) ctx.getBean("service4");
        bookService.save();
    }
}

3、运行程序

测试结果正常,则配置成功

注意事项

  • bean依赖注入的ref属性指定bean,必须在容器中是存在的
  • 获取bean无论是通过id还是name获取,如果无法获取到,将抛出异常NoSuchBeanDefinitionException

bean作用范围配置

Spring默认创造的的bean是单例的

我们可以给他设置属性 scope

这个属性的作用是修改bean的作用范围
有两个属性

  • scope="prototype" 非单例模式
  • scope="singleton" 单例模式(默认模式)

bean作用范围说明

  • 为什么bean默认为单例的?
    spring管理的就是复用的对象,效率更高
  • 适合交给容器管理的bean?
    • 表现层对象
    • 业务层对象
    • 数据层对象
    • 工具对象
  • 不适合交给容器管理的bean?
    • 封装实体的域对象

Bean的实例化——构造方法

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

实例化bean的三种方式,构造方法,静态工厂和实例工厂

构造方法实例化

1、首先在XML文件中将类配置到Spring容器中

2、编写运行程序

3、在类中提供构造函数测试(无参构造函数)

public class BookDaoImpl implements BookDao {

//    构建一个 无参构造函数
    public BookDaoImpl() {
        System.out.println("book dao constructor is running ....");
    }

    public void save() {
        System.out.println("book dao save ...");
    }

}

静态工厂实例化

1、创建工厂类 并提供一个静态方法

//静态工厂创建对象
public class OrderDaoFactory {
    public static OrderDao getOrderDao(){
        return new OrderDaoImpl();
    }
}

2、编写运行类,并在类中通过工厂获取对象

public class AppForInstanceOrder {
    public static void main(String[] args) {
        //通过静态工厂创建对象
        OrderDao orderDao = OrderDaoFactory.getOrderDao();
        orderDao.save();
    }
}

3、运行,查看结果

静态工厂实例化:

在spring的配置文件application.properties中添加以下内容:

<bean id="orderDao" class="com.itheima.factory.OrderDaoFactory" factory-method="getOrderDao"/>

class:工厂类的类全名

factory-mehod:具体工厂类中创建对象的方法名

然后在运行类里面,使用IoC容器中获取bean

然后运行

静态工厂实例化 一般是用来兼容早期的一些老系统 了解即可

实例工厂与FactoryBean

1、创建工厂类,并提供一个普通方法

public class UserDaoFactory {
    public UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

2、编写运行类,在类中通过工厂获取对象

public class AppForInstanceUser {
    public static void main(String[] args) {
        //创建实例工厂对象
        UserDaoFactory userDaoFactory = new UserDaoFactory();
        //通过实例工厂对象创建对象
        UserDao userDao = userDaoFactory.getUserDao();
        userDao.save();
}

3、运行启动,查看结果

实例工程实例化

操作步骤:

1、在spring的配置文件中添加内容

<bean id="userFactory" class="com.itheima.factory.UserDaoFactory"/>
<bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>

2、实例化工厂运行的顺序是:
1.创建实例化工厂对象,对应的是第一行配置
2.调用对象中的方法来创建bean,对应的是第二行配置
factory-bean:工厂的实例对象
factory-method:工厂对象中的具体创建对象的方法名
factory-mehod:具体工厂类中创建对象的方法名
对应关系如下:

3、在运行类中使用IoC容器获取bean的方法进行测试

public class AppForInstanceUser {
    public static void main(String[] args) {
        ApplicationContext ctx = new 
            ClassPathXmlApplicationContext("applicationContext.xml");
//    获取bean方法
        UserDao userDao = (UserDao) ctx.getBean("userDao");
        userDao.save();
    }
}

4、运行查看结果

FactoryBean

使用步骤:

1、创建按一个FactoryBean的类,实现FactoryBean接口,重写接口方法

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

2、在spring配置文件中进行配置

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

3、运行类一样,直接运行,查看结果

bean的生命周期

bean的生命周期详解

1、什么是生命周期
从创建到消亡的完整过程,例如人从出生到死亡的整个过程就是一个生命周期

2、bean生命周期是什么
bean对象从创建到销毁的整体过程

3、bean的生命周期控制是什么
在bean创建后到销毁前做一些事情

bean生命周期设置

bean创建之后,想要添加内容,比如用来初始化需要用到资源

bean销毁之前,想要添加内容,比如用来释放用到的资源

联系作者:2572976830@qq.com
© 2025 Eric小屋
Theme by Wing
京ICP备2023032157号 京公网安备11011402053616号
  • {{ item.name }}
  • {{ item.name }}