IOC Bean管理 - FactoryBean(工厂Bean)

IOC Bean管理 - FactoryBean(工厂Bean)

IOC中的Bean类型

  1. 普通Bean:只能返回标签定义的类型
    例如:

16725574406317
标签路径为User类,那么调用就会返回一个User对象

  1. 工厂Bean(FactoryBean):定义的Bean类型可以返回其他不同的类型

FactoryBean

先实现一个普通Bean:

类:

package com.xjy.spring.factoryBean;

public class factoryBean {
}

创建Bean标签

<bean id="factory" class="com.xjy.spring.factoryBean.factoryBean"></bean>

TestDemo:

public class TestDemo {
    public static void main(String[] args) {
        ApplicationContext context =
                new ClassPathXmlApplicationContext("SpringConfig.xml");
        factoryBean bean =
                context.getBean("factory",factoryBean.class);
        System.out.println(bean);
    }
}

输出:

普通Bean只能返回Bean标签定义的类型

FactoryBean实现

要实现工厂Bean,首先要实现一个工厂Bean接口“FactoryBean”

修改类

package com.xjy.spring.factoryBean;

import org.springframework.beans.factory.FactoryBean;

public class factoryBean implements FactoryBean {
    @Override
    public Object getObject() throws Exception {
        return null;
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }

    @Override
    public boolean isSingleton() {
        return FactoryBean.super.isSingleton();
    }
}

继承后需要实现三个方法:

  • getObject():决定Bean的返回值
  • getObjectType():创建的Bean类型
  • isSingleton():是否为单例

类实现

主要在getObject上修改:

在这里使得返回类型为先前编写过的User类

User:

public class User {
   private String name;

   public void setName(String name) {
       this.name = name;
   }

   public void Start(){
       System.out.println("User Class Start!");
   }
}

getObject()

 @Override
    public User getObject() throws Exception {
        User user = new User();
        user.setName("TOM");
        return user;
    }

TestDeomo

public class TestDemo {
    public static void main(String[] args) {
        ApplicationContext context =
                new ClassPathXmlApplicationContext("SpringConfig.xml");
        User user =
                context.getBean("factory",User.class);
        System.out.println(user);
    }
}

输出:

通过FactoryBean得到了一个User类型对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA小菜鸡223

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值