A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 wuqiong 于 2018-4-10 10:44 编辑

1. Spring生成bean的三种方式
1.1. 无参构造方法
默认调用无参构造方法实例化bean。
编写UserDao接口及实现类UserDaoImpl:

file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4600.tmp.jpg?lastModify=1523327470
在UserDaoImpl添加无参构造方法:

public class UserDaoImpl implements UserDao {

    public UserDaoImpl() {

        System.out.println("调用了无参构造方法...");

    }

    @Override

    public void save() {

        System.out.println("user save...");

    }

}
把UserDaoImpl配置spring容器中:
<bean id="userDao" class="cn.itcast.dao.impl.UserDaoImpl"></bean>
创建单元测试类TestDI,并编写单元测试方法test1:
file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4601.tmp.jpg?lastModify=1523327470


@Test

public void test1() {
        // 创建spring工厂(创建ioc容器)
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) ac.getBean("userDao");
        userDao.save();
}
测试结果如下:

file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4602.tmp.jpg?lastModify=1523327470
1.2. 静态工厂实例化方式
通过调用工厂类的静态方法来生成bean
编写DeptDao接口
file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4603.tmp.jpg?lastModify=1523327470



package cn.itcast.dao;

public interface DeptDao {
    public void save();
}
编写DeptDaoImpl实现类

file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4604.tmp.jpg?lastModify=1523327470

public class DeptDaoImpl implements DeptDao{

    @Override
    public void save() {
        System.out.println("持久层:部门保存...");
    }
}
编写工厂类,在其中创建静态工厂方法
file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4605.tmp.jpg?lastModify=1523327470




public class Factory {


    /**

     * 静态工厂方法

     */

    **public** **static** DeptDao create(){

        System.**out**.println("调用了静态工厂方法");

        **return** **new** DeptDaoImpl();

    }

   

}
编写applicationContext.xml配置文件,采用静态工厂方式配置DeptDaoImpl类

<?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="userDao" class="cn.itcast.dao.impl.UserDaoImpl"></bean>

     <bean id="deptDao" class="cn.itcast.factory.Factory" factory-method="create"></bean>

</beans>
在配置DeptDaoImpl这个bean时,class属性写的不是DeptDaoImpl的全路径名,而是工厂类的全路径名;
factory-method:指定工厂类中静态方法的名字
在TestIOC类中编写测试方法test4

    @Test
    public void test4(){
        //创建Spring工厂(创建IOC容器)
        ApplicationContext ac = **new** ClassPathXmlApplicationContext("applicationContext.xml");
        DeptDao deptDao = (DeptDao) ac.getBean("deptDao");
        deptDao.save();
    }
测试结果如下:


file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4606.tmp.jpg?lastModify=1523327470
1.3. 实例工厂实例化方式
修改Factory工厂类,创建实例工厂方法:

public class Factory {
    /**

     * 静态工厂方法

     */

    /*public static DeptDao create(){

        System.out.println("调用了静态工厂方法");

        return new DeptDaoImpl();

    }*/

   

    /**

     * 实例工厂方法

     * **@return**

     */

    **public**  DeptDao create(){

        System.**out**.println("调用了实例工厂方法");

        **return** **new** DeptDaoImpl();

    }

}
编写applicationContext.xml,采用实例工厂方式重写配置DeptDaoImpl

<?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="userDao" class="cn.itcast.dao.impl.UserDaoImpl"></bean>

    <!--  <bean id="deptDao" class="cn.itcast.factory.Factory" factory-method="create"></bean>  -->

       <!-- 实例工厂方法来实例化 -->

     <bean id="factory" class="cn.itcast.factory.Factory"></bean>

     <bean id="deptDao" factory-bean="factory" factory-method="create"></bean>

</beans>
factory-bean:指定工厂bean的id;
Factory-method:指定工厂bean的实例工厂方法的名字
运行test4测试方法,测试结果如下:


file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4617.tmp.jpg?lastModify=1523327470


2 个回复

倒序浏览
我来占层楼啊   
回复 使用道具 举报

谢谢啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马