【spring实例化Bean的常用方式】构造方法、setter、静态工厂、实例工厂

版权声明: https://blog.csdn.net/Song_JiangTao/article/details/81941587

准备:

创建项目,创建dao,service,test包(test下只放一个test类)
这里写图片描述

一、构造方法

SpringDao.java

package com.nuc.dao;

public interface SpringDao {
    public void save(String str,String age);
}

SpringDaoImpl.java

package com.nuc.dao.impl;

import com.nuc.dao.SpringDao;

public class SpringDaoImpl implements SpringDao {

    @Override
    public void save(String str,String age) {
        System.out.println("i come from DaoImpl test:"+str+age);
    }

}

SpringService.java

package com.nuc.service;

public interface SpringService {
    public void save(String str,String age);
}

SpringServiceImpl.java

package com.nuc.service.impl;

import com.nuc.dao.SpringDao;
import com.nuc.service.SpringService;

public class SpringServiceImpl implements SpringService {
    private SpringDao springDa;
    public SpringServiceImpl(SpringDao springDa){//构造方法实例化bean
        this.springDa = springDa;
    }
    @Override
    public void save(String str,String age) {
        springDa.save(str,age);
    }
}

SpringTest.java

package com.nuc.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.nuc.service.SpringService;
public class SpringTest {
    ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
    @Test
    public void test(){//构造器实例化bean测试
        SpringService springService = (SpringService) ac.getBean("Service");
        springService.save("sjt","21");
    }
}

beans.xml

<?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,传到Service的是参数,而不是属性 --> 
        <bean id="Service" class="com.nuc.service.impl.SpringServiceImpl">
            <constructor-arg name="springDa" ref="Dao"></constructor-arg>
        </bean>
        <bean id="Dao" class="com.nuc.dao.impl.SpringDaoImpl"></bean>

</beans>

测试结果:
这里写图片描述

二、setter

  • 在SpringServiceImpl.java中创建属性springDa的setter方法

    public void setSpringDa(SpringDao springDa) {//setter实例化
        this.springDa = springDa;
    }
  • 修改beans.xml

    <!-- setter实例化bean,传到Service的是属性-->
        <bean id="Service" class="com.nuc.service.impl.SpringServiceImpl">
            <property name="springDa" ref="Dao"></property>
        </bean>
        <bean id="Dao" class="com.nuc.dao.impl.SpringDaoImpl"></bean>
    
  • 新建测试方法

    @Test
    public void test2(){//setter实例化bean测试
        SpringServiceImpl springService = (SpringServiceImpl) ac.getBean("Service");
        springService.save("ss","21");
    }

    测试结果:
    这里写图片描述

三、静态工厂

新建FactoryBean.java

package com.nuc.dao;

import com.nuc.dao.impl.SpringDaoImpl;

public class FactoryBean {//静态工厂实例化bean
    public static SpringDao creatSpringDao(){
        return new SpringDaoImpl();
    }   
}

修改beans.xml

<bean id="Dao" class="com.nuc.dao.FactoryBean" factory-method="creatSpringDao"></bean>   

新建测试方法

public void test3(){//静态工厂
    SpringDaoImpl sdi = (SpringDaoImpl) ac.getBean("Dao");
    sdi.save("sjj","22");
}

结果
这里写图片描述

四、实例工厂

在FactoryBean.java中新增方法

public SpringDao creatSpringDao2(){//实例工厂
    return new SpringDaoImpl();
} 

配置beans.xml

<bean name="factory" class="com.nuc.dao.FactoryBean"></bean>
<bean id="Dao" factory-bean="factory" factory-method="creatSpringDao2"></bean>

测试方法

@Test
public void test4(){//实例工厂
    SpringDaoImpl sdi = (SpringDaoImpl) ac.getBean("Dao");
    sdi.save("ssss2","21");
}

结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/Song_JiangTao/article/details/81941587