• 一步一步深入spring(2)-三种方式来实例化bean


    一步一步深入spring(1)--搭建和测试spring的开发环境中提到了一种实例化bean的方式,也是最基本的使用构造器实例化bean

    1.使用构造器实例化bean:这是最简单的方式,Spring IoC容器即能使用默认空构造器

    2.使用静态工厂方式实例化Bean,使用这种方式除了指定必须的class属性,还要指定factory-method属性来指定实例化Bean的方法,而且使用静态工厂方法也允许指定方法参数,spring IoC容器将调用此属性指定的方法来获取Bean,配置如下所示:

    (1)先编写一个静态工厂类方法:

     1 package junit.test;
     2 
     3 import com.yangyang.PersonService;
     4 import com.yangyang.impl.PersonServiceImpl;
     5 
     6 public class PersonServiceBeanFactory {
     7      //工厂方法
     8     public static PersonService newInstance(){
     9         //返回需要的实例
    10         return new PersonServiceImpl();
    11     }
    12 
    13 }
    View Code

    (2)编写配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
     3     "http://www.springframework.org/dtd/spring-beans.dtd">
     4 
     5 <beans>
     6   <!-- id 表示你这个组件的名字,class表示组件类 -->
     7 <!--     <bean id="personService" class="com.yangyang.impl.PersonServiceImpl"></bean> -->
     8   <!-- 通过使用静态工厂方式实例化Bean -->
     9     <bean id="personService2" class="junit.test.PersonServiceBeanFactory" factory-method="newInstance"></bean>
    10 </beans>
    View Code

    (3)编写单元测试

    1     ApplicationContext ctx=new ClassPathXmlApplicationContext("resources/beans.xml");
    2         //从容器中获取Bean,注意此处完全“面向接口编程,而不是面向实现”
    3         //通过使用静态工厂方式实例化Bean
    4         PersonService personService2=(PersonService) ctx.getBean("personService2",PersonService.class);
    5         personService2.sayHello();
    View Code

    也能像方法一的一样出现hello world字样,实例化bean成功

    3.使用实例工厂方法实例化Bean:使用这种方式不能指定class属性,此时必须使用factory-bean属性来指定工厂Beanfactory-method属性指定实例化Bean的方法,而且使用实例工厂方法允许指定方法参数,方式和使用构造器方式一样,配置如下:

    (1)先编写实例工厂类:

     1 package junit.test;
     2 
     3 import com.yangyang.PersonService;
     4 import com.yangyang.impl.PersonServiceImpl;
     5 
     6 public class PersonServiceBeanFactory {
     7     //实例化工厂方法
     8     public PersonService newInstance(){
     9         return new PersonServiceImpl();
    10     }
    11 
    12 }
    View Code

    (2)编写配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
     3     "http://www.springframework.org/dtd/spring-beans.dtd">
     4 
     5 <beans>
     6   <!-- id 表示你这个组件的名字,class表示组件类 -->
     7     <!--1、定义实例工厂Bean  --> 
     8     <bean id="beanInstanceFactory" class="junit.test.PersonServiceBeanFactory"/>
     9     <!-- 2、使用实例工厂Bean创建Bean  -->
    10     <bean id="personService3"  factory-bean="beanInstanceFactory" factory-method="newInstance"></bean>
    11 </beans>
    View Code

    (3)编写单元测试:

    1     //读取配置文件实例化一个IoC容器
    2         ApplicationContext ctx=new ClassPathXmlApplicationContext("resources/beans.xml");
    3         //通过实例工厂类实例化Bean
    4         PersonService personService2=(PersonService) ctx.getBean("personService3",PersonService.class);
    5         personService2.sayHello();
    View Code

    也能像方法一的一样出现hello world字样,实例化bean成功

    ----------------------------------------------------------------------------------------
    如果您觉得阅读本文对您有帮助,请微信扫码关注作者,与我进行交流!欢迎各位转载,转载文章之后须在文章页面明显位置给出作者和原文连接,谢谢。
  • 相关阅读:
    iOS多图上传
    iOS强制横屏
    pod导入融云路径报错解决办法
    iOS 制作一个动态库
    iOS ProtocolBuffer使用介绍
    iOS 静态库与动态库的区别
    pod命令创建私有库详解【引用其他私有库、oc、Swift混编】
    M1 安装homebrew详解
    M1 执行pod install 报错
    iOS 消息转发机制
  • 原文地址:https://www.cnblogs.com/shunyang/p/3236271.html
Copyright © 2020-2023  润新知