找回密码
 立即注册
首页 业界区 业界 spring6-工厂设计模式与bean的实例化方式

spring6-工厂设计模式与bean的实例化方式

史穹逊 3 小时前
bean的作用域

ioc容器默认bean是单例的(singleton)。
bean对象的创建是在初始化上下文的时候就创建了,每一次调用getBean()时,都返回那个单例对象。
  1. // 这行代码会创建配置里面的bean对象
  2. ApplicationContext context = new FileSystemXmlApplicationContext("D:/applicationContext.xml");
复制代码
那如何把bean设置成多例的?
  1. [/code][code]// 由于这个bean是多例模式,这行代码不会创建bean对象。而是在调用getBean()时创建对象
  2. ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml","spring-dao.xml");
  3. // 这行代码才会创建bean对象
  4. Object user=  <bean id="starBean"  factory-method="createStar"></bean>context.getBean("sb");
复制代码
  1.   <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>
复制代码
自定义scope


  • 自定义Scope(实现Scope接口)

    • spring内置了线程范围类: org.springframework.context.support.SimpleThreadScope

  • 添加配置信息
  1.   <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>
复制代码
GoF之工厂模式

工厂模式的三种形态


  • 简单工厂模式(Simple Factory):又叫静态工厂方法模式。是工厂方法模式的一种特殊实现。
  • 工厂方法模式 (Factory Method)
  • 抽象工厂模式 (Abstract Factory)
简单工厂模式

简单工厂模式包括三个角色:抽象产品、具体产品、工厂类。代码如下:

  • 抽象产品类
  1. // 抽象产品角色
  2. public abstract class Weapon {
  3.         public abstract void attack();
  4. }
复制代码

  • 具体产品
    1. // 具体产品角色:匕首public class Dagger extends Weapon{  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>@Override  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public void attack() {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>System.out.println("匕首攻击...");  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}}
    复制代码
  1. // 具体产品角色:战斗机public class Fighter extends Weapon{  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>@Override  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public void attack() {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>System.out.println("战斗机攻击...");  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}}
复制代码
  1. // 具体产品角色:坦克public class Tank extends Weapon{  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>@Override  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public void attack() {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>System.out.println( "坦克攻击。。。");  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}}
复制代码

  • 工厂类角色
  1. // 工厂类角色public class WeaponFactory {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>/**  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/> * 静态方法:根据传入的参数获取相应的武器  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/> * @return  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/> */  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public static Weapon get(String type){  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>switch (type){  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>case "Tank":  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>return new Tank();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>case "Fighter":  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>return new Fighter();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>case "Dagger":  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>return new Dagger();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>default:  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>return null;  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}}
复制代码
测试代码:
  1. public class Main {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public static void main(String[] args) {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>// 简单工厂模式达到职责分离。客户端不关心产品生产的细节  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>// 客户端只负责消费,工厂类负责生产。这就是简单工厂模式的作用。  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>Weapon weapon1 = WeaponFactory.get("Tank");  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>weapon1.attack();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>Weapon weapon2 = WeaponFactory.get("Fighter");  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>weapon2.attack();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>Weapon weapon3 = WeaponFactory.get("Dagger");  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>weapon3.attack();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}}
复制代码
优缺点:
优点:实现职责分离。
缺点:假如要添加新产品。需要修改工厂类代码。显然违反了ocp原则。
​  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>工厂类责任重大。一旦瘫痪,这个系统必然瘫痪。
工厂方法模式

工厂方法模式保留了简单工厂模式的优点。同时解决了简单工厂模式的缺点。
解决方法是:一个工厂对应一个产品。符合ocp原则。
优点:扩展性高。要想增加一个产品。只要扩展一个工厂类就可以。
  1.         屏蔽产品具体实现。调用者只关心产品的接口。
复制代码
缺点:会使类的数量成倍增加,增加系统复杂度。
工厂方法模式的角色包括:

  • 抽象工厂角色
  • 具体工厂角色
  • 抽象产品角色
  • 具体产品角色
代码如下:
  1. // 抽象产品角色public abstract class Weapon {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public abstract void attack();}// 具体产品角色:匕首public class Dagger extends Weapon {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>@Override  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public void attack() {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>System.out.println("匕首攻击...");  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}}// 具体工厂类:枪械工厂public class GunFactory extends WeaponFactory{  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>@Override  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public Weapon get() {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>return new Gun();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}}// 抽象工厂类public abstract class WeaponFactory {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public abstract Weapon get();}// 具体工厂类:匕首工厂public class DaggerFactory extends WeaponFactory{  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>@Override  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public Weapon get() {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>return new Dagger();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}}// 具体工厂类:枪械工厂public class GunFactory extends WeaponFactory{  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>@Override  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public Weapon get() {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>return new Gun();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}}
复制代码
测试代码:
  1. public static void main(String[] args) {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>WeaponFactory weaponFactory = new DaggerFactory();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>Weapon dagger = weaponFactory.get();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>dagger.attack();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>WeaponFactory weaponFactory1 = new GunFactory();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>Weapon gun = weaponFactory1.get();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>gun.attack();}
复制代码
bean的实例化

spring为bean提供了多种实例化的方式,通常包括4种方式。

  • 通过构造方法实例化
  • 通过简单工厂模式实例化
  • 通过factory-bean实例化
  • 通过FactoryBean接口实例化
通过构造方法实例化
  1.   <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>
复制代码
通过简单工厂模式实例化
  1. // 工厂类public class StarFactory {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public static Star createStar() {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>return new Star();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}}
复制代码
  1.   <bean id="starBean"  factory-method="createStar"></bean>
复制代码
通过factory-bean实例化
  1. // 工厂方法模式中的具体产品类public class Gun {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public Gun() {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>System.out.println("无参数构造器:Gun()");  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}}// 工厂方法模式中的具体工厂类public class GunFactory {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public Gun get(){  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>return new Gun();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}}
复制代码
  1.   <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>
复制代码
通过FactoryBean接口实例化

通过factory-bean实例化的方式需要我们自定义factory-bean和factory-method。
在spring中,当自己的类实现了FactoryBean接口后factory-bean和factory-method就不需要指定了。factory-bean会自动指向实现FactoryBean接口的类,factory-method会自动指向getObject()方法。
  1. public class PersonFactoryBean implements FactoryBean {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>@Override  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public Person getObject() throws Exception {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>// 手动创建对象  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>return new Person();  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>@Override  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>public Class getObjectType() {  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>return null;  <bean id="starBean"  factory-method="createStar"></bean>  <bean id="starBean"  factory-method="createStar"></bean><bean id="springBean"  <bean id="starBean"  factory-method="createStar"></bean>/><bean id="sb"  <bean id="starBean"  factory-method="createStar"></bean> scope="prototype"/>}}
复制代码
[code][/code]BeanFactory和FactoryBean的区别

BeanFactory:spring ioc容器的顶级对象,负责创建bean对象。BeanFactory是工厂
FactoryBean:本质是一个bean。能够辅助spring实例化其他bean对象。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册