欢迎使用CSDN-markdown编辑器

Bean 的常见几种实例化方式

刚学完bean的几种常见的实例化方式,感觉以后要使用的话会被遗忘,索性就总结一下,以后要是用到新的方式,还会再追加。

  • 第一种:默认无参数构造器进行初始化
  • 第二种:静态工厂进行初始化
  • 第三种:实例工厂进行初始化
  • 第四种:实现FactoryBean接口进行初始化

第一种:默认无参数构造器进行初始化

-我们先创建一个Bean1类

package com.yyk.definationBean;
/**
 * 
 * @author Administrator
 * 对于bean1
 * 我们采用第一种实例化bean的方式:默认无参数构造器进行初始化
 */
public class Bean1 {
    //默认会有一个无参构造器 所以才不会报错
    public void getBean(){
        System.out.println("Bean1==========getBean()");
    }

    /**
      测试1  如果我们加一个有参数的构造器 ,测试结果会报错
        public Bean1(int n){}

    测试2  如果存在一个无参的 一个有参的 构造器  则不会报错
        public Bean1(int n){}
        public Bean1(){}
    */
}

-在配置文件中进行配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 <!-- 第一种 默认无参数构造器的构造-->
     <bean id="bean1" class="com.yyk.definationBean.Bean1"/>

-在测试程序中进行调用

@Test
    public void testDefination() {
        //获取工厂
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");
        bean1.getBean();
        System.out.println(bean1);//获取bean1对象

第二种:静态工厂进行初始化

-我们先创建一个Bean2类

package com.yyk.definationBean;
/**
 * 
 * @author Administrator
 * 对于bean2
 * 我们通过静态工厂方法进行实例化bean, 我们要建立一个静态工厂类
 */
public class Bean2 {}

-创建一个静态工厂类:

package com.yyk.definationBean;
/*  bean2的工厂类
    实际中静态工厂的使用是 拿别人做好的静态工厂 我们调用其中的一些方法  就可以使用
    然后进行 静态工厂的配置
*/
public class Bean2Factory {
    //静态方法
    public static Bean2 initBean2(){
        System.out.println("静态工厂方法==============");
        return new Bean2();//返回的对象可以是任意
    }
}

-在配置文件中进行配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 <!-- 第二种 静态工厂调用方法 -->
     <bean id="bean2" class="com.yyk.definationBean.Bean2Factory" factory-method="initBean2"/>

-在测试程序中进行调用

@Test
    public void testDefination() {
        //获取工厂
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        //通过调用静态工厂的方式进行
        Bean2 bean2 = (Bean2) applicationContext.getBean("bean2");
        System.out.println(bean2);//获取bean2对象

第三种:实例工厂进行初始化

-我们先创建一个Bean3类

package com.yyk.definationBean;
/**
 * 
 * @author Administrator
 * 对于bean3
 * 用实例工厂进行实例化bean
 */
public class Bean3 {}

-Bean3的实例化工厂

package com.yyk.definationBean;
//实例工厂方法
//显示中使用别人的工厂的时候进行调用  然后进行配置
public class Bean3Factory {
    public Bean3 createBean3(){
        return new Bean3();
    }
}

-在配置文件中进行配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  <!-- 第三种 实例工厂方法 -->
     <bean id="bean3Factory" class="com.yyk.definationBean.Bean3Factory"/>
     <bean id="bean3" factory-bean="bean3Factory" factory-method="createBean3"/>

-在测试程序中进行调用

@Test
    public void testDefination() {
        //获取工厂
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        //通过实例工厂方法进行
        Bean3 bean3 = (Bean3) applicationContext.getBean("bean3");
        System.out.println(bean3);//获取bean3对象

第四种:实现FactoryBean接口进行初始化

-我们先创建一个自定义工厂bean类

package com.yyk.definationBean;

import org.springframework.beans.factory.FactoryBean;

/**第四种 利用FactoryBean 进行实例化Bean
 * 自定义工厂Bean 需要实现一个接口 
 *  实现方法  之后进行配置
 */
public class MyFactoryBean implements FactoryBean<Bean3> {
    //返回目标对象的方法
    @Override
    public Bean3 getObject() throws Exception {
        System.out.println("这是一个工厂bean========");
        return new Bean3();
    }

    @Override
    public Class<?> getObjectType() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public boolean isSingleton() {
        // TODO Auto-generated method stub
        return false;
    }

}

-在配置文件中进行配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 <!-- 第四种 利用FactoryBean进行 -->
     <bean id="bean3_2" class="com.yyk.definationBean.MyFactoryBean"/>

-在测试程序中进行调用

@Test
    public void testDefination() {
        //获取工厂
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        //通过实现FactoryBean方法进行
        System.out.println(applicationContext.getBean("bean3_2"));

除此之外,还可以使用bean的注解进行实例化bean。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值