bean_基础配置与实例化


bean配置

bean基础配置

  • 名称:bean

  • 类型:标签

  • 所属:beans标签

  • 功能:定义Spring核心容器管理的对象

  • 格式:

    <beans>
    	<bean/>
        <bean></bean>
    </beans>
  • 属性列表:

    • id:bean 的 id,使用容器可以通过 id 值获取对应的 bean,在一个容器中 id 值唯一
    • class:bean 的类型,即配置的 bean 的全路径类名
  • 范例:

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

bean别名配置

  • 名称:name

  • 类型:属性

  • 所属:bean标签

  • 功能:定义bean的别名,可定义多个,使用逗号(,) 分号(;) 空格( ) 分隔

  • 范例:

    <bean id="bookDao" name="dao bookDaoImpl" class="com.itheima.dao.impl.BookDaoImpl"/>
    <bean name="service, bookServiceImpl" class="com.itheima.service.impl.BookServiceImpl" />
  • 注意事项:

    • 获取bean无论是通过 id 还是 name 获取,如果无法获取到,将抛出异常 NoSuchBeanDefinitionException
    • NoSuchBeanDefinitonException: No bean named ‘bookServiceImpl’ available

bean作用范围说明

  • 为什么bean默认为单例?
    • 一般spring管理的都是复用的
  • 适合交给容器进行管理的bean
    • 表现层对象
    • 业务层对象
    • 数据层对象
    • 工具对象
  • 不适合交给容器进行管理的bean
    • 封装实体的域对象
bean实例化
  • bean本质上就是对象,创建bean使用构造方法完成

实例化bean的三种方式 —— 构造方法(常用)

  • 提供可访问的构造方法

    public class BookDaoImpl implements BookDao {
    
        public BookDaoImpl() {
            System.out.println("book dao constructor is running ......");
        }
    
        @Override
        public void save() {
            System.out.println("book dao save");
        }
    }
  • 配置

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
  • 无参构造方法如果不存在,将抛出异常BeanCreationException

实例化bean的三种方法 —— 静态工厂(了解)

  • 静态工厂

    public class OrderDaoFactory {
        public static OrderDao getOrderDao() {
            System.out.println("factory setup ...");
            return new OrderDaoImpl();
        }
    }
  • 配置

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

实例化bean的三种方法 —— 实例工厂 (了解)

  • 实例工厂

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

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

实例化bean的第四种方式 —— FactoryBean

  • FactoryBean

    public class UserDaoFactoryBean implements FactoryBean<UserDao> {
        //代替原始实例工厂创建对象的方法
        @Override
        public UserDao getObject() throws Exception {
            return new UserDaoImpl();
        }
    
        @Override
        public Class<?> getObjectType() {
            return UserDao.class;
        }
    }
  • 配置

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

总结

  • 构造方法(常用)
  • 静态工厂(了解)
  • 实例工厂(了解)
    • FactoryBean(实用)

文章作者: han yue
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 han yue !
评论
  目录