spring核心API、装配Bean 基于XML、Bean种类


2017.0714 核心API、装配Bean 基于XML、Bean种类

  • BeanFactory :这是一个工厂,用于生成任意bean。
    采取延迟加载,第一次getBean时才会初始化Bean

  • ApplicationContext:是BeanFactory的子接口,功能更强大。(国际化处理、事件传递、Bean自动装配、各种不同应用层的Context实 现)。当配置文件被加载,就进行对象实例化。

    ClassPathXmlApplicationContext 用于加载classpath(类路径、src)下的xml

    加载xml运行时位置 –> /WEB-INF/classes/…xml

    FileSystemXmlApplicationContext 用于加载指定盘符下的xml

    加载xml运行时位置 –> /WEB-INF/…xml

       通过java web ServletContext.getRealPath() 获得具体盘符
    @Test
    public void demo02(){
        //使用BeanFactory  --第一次条用getBean实例化
        String xmlPath = "com/itheima/b_di/beans.xml";

        BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource(xmlPath));

        BookService bookService = (BookService) beanFactory.getBean("bookServiceId");

        bookService.addBook();

    }

applicationContex一加载、配置文件就实例化


  1. 实例化方式
**3种bean实例化方式:默认构造、静态工厂、实例工厂**

1.1    默认构造
<bean id="" class="">  必须提供默认构造

1.2    静态工厂
    常用与spring整合其他框架(工具)
    静态工厂:用于生成实例对象,所有的方法必须是static
    <bean id=""  class="工厂全限定类名 也是包名+类名"  factory-method="静态方法">

1.2.1    工厂
public class MyBeanFactory {

    /**
     * 创建实例
     * @return
     */
    public static UserService createService(){
        return new UserServiceImpl();
    }
}

1.2.2    spring配置
<!-- 将静态工厂创建的实例交予spring 
    class 确定静态工厂全限定类名
    factory-method 确定静态方法名
-->
<bean id="userServiceId" class="com.itheima.c_inject.b_static_factory.MyBeanFactory" factory-method="createService"></bean>


1.3    实例工厂
    实例工厂:必须先有工厂实例对象,通过实例对象创建对象。提供所有的方法都是“非静态”的

1.3.1    工厂
    /**
     * 实例工厂,所有方法非静态
     *
     */
    public class MyBeanFactory {

        /**
         * 创建实例
         * @return
         */
        public UserService createService(){
            return new UserServiceImpl();
        }

    }

1.3.2    spring配置

<!-- 创建工厂实例 -->
<bean id="myBeanFactoryId" class="com.itheima.c_inject.c_factory.MyBeanFactory"></bean>
<!-- 获得userservice 
    * factory-bean 确定工厂实例
    * factory-method 确定普通方法
-->
<bean id="userServiceId" factory-bean="myBeanFactoryId" factory-method="createService"></bean>

  1. Bean种类

    • 普通bean:之前操作的都是普通bean。 ,spring直接创建A实例,并返回

    • FactoryBean:是一个特殊的bean,具有工厂生成对象能力,只能生成特定的对象。

      bean必须使用 FactoryBean接口,此接口提供方法 getObject() 用于获得特定bean。

      先创建FB实例,使用调用getObject()方法,并返回方法的返回值

        FB fb = new FB();<br/>
        return fb.getObject();<br/>
    • BeanFactory 和 FactoryBean 对比?

      BeanFactory:工厂,用于生成任意bean。

      FactoryBean:特殊bean,用于生成另一个特定的bean。例如:ProxyFactoryBean ,此工厂bean用于生产代理。

      获得代理对象实例。AOP使用

  2. 作用域

    作用域:用于确定spring创建bean实例个数

    取值:
    singleton 单例,默认值。
    prototype 多例,每执行一次getBean将获得一个实例。例如:struts整合spring,配置action多例。
    配置信息
    <bean id="" class=""  scope="">

    <bean id="userServiceId" class="com.itheima.d_scope.UserServiceImpl"  scope="prototype" ></bean>

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