Spring创建Bean对象的三种方式

2 篇文章 0 订阅

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

业务层

BookService.java

public interface BookService {
    void save();
}

BookServiceImpl.java

public class BookServiceImpl implements BookService {
    private BookDao bookDao;

    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    @Override
    public void save() {
        bookDao.save();
    }
}

数据访问层

BookDao.java

public interface BookDao {
    void save();
}

BookDaoImpl.java

public class BookDaoImpl implements BookDao{
    private BookDao bookDao;
    public BookDaoImpl(){
        System.out.println("构造方法 ...");
    }


    @Override
    public void save() {
        System.out.println("bookDao method...");
    }
}

静态工厂

public class BookDaoFactory {
    //静态工厂创建对象
    public static BookDao getBookDao(){
        System.out.println("调用了静态工厂");
        return new BookDaoImpl();
    }
}

实例工厂

public class BookDaoFactory2 {
	//实例工厂创建对象
    public BookDao getBookDao2(){
        System.out.println("调用实例工厂");
        return new BookDaoImpl();
    }
}

一、无参数构造方法

<?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">
    <!-- 1.创建bean对象方式1:默认调用类的无参构造函数的创建(Ioc创建并存储在容器中) -->
    <bean class="com.hntou.dao.impl.BookDaoImpl" id="bookDao"></bean>
</beans>

通过Ioc调用类的无参构造函数创建bean对象并存储到容器中

二、静态工厂

<?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">
    <!-- 2.创建bean对象方式2:调用静态工厂创建bean对象加入Ioc容器 -->
    <bean class="com.hntou.factory.BookDaoFactory" id="bookDao2" factory-method="getBookDao"></bean>
</beans>

通过静态工厂创建bean对象并且加入到Ioc容器中

三、实例工厂

<?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">
    <!-- 3.创建bean对象方式3:调用实例工厂创建工厂对象再创建bean对象加入Ioc容器 -->
    <!--3.1 实例工厂对象 -->
    <bean class="com.hntou.factory.BookDaoFactory2" id="bookDaoFactory2"></bean>
    <!--3.2 调用实例工厂对象创建对象加入Ioc容器 -->
    <bean factory-bean="bookDaoFactory2" factory-method="getBookDao2" id="bookDao3"></bean>
</beans>

通过Ioc创建实例工厂对象再通过实例工厂加入到Ioc容器中

BookServiceTest.java测试类

public class BookServiceTest {
    //一般其他框架整合Spring需要通过其他工厂调用
    @Test
    public void test(){
    /1.根据配置文件 applicationContext.xml 创建Ioc容器对象 ClassPathXMLApplicationContext
        //1.1 会先创建Ioc容器对象
        //1.2 自动解析类路径下的applicationContext.xml 里面的数据
        //1.3 根据<bean> 配置对象加入Ioc容器中存储
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        2.获取实现类对象
        BookDao bookDao =(BookDao) context.getBean("bookDao");
        BookDao bookDao2 =(BookDao) context.getBean("bookDao2");
        BookDao bookDao3 =(BookDao) context.getBean("bookDao3");
        //3.调用对象方法
        bookDao.save();
        //4.关闭容器
        context.close();
    }
}

在这里插入图片描述
一般其他框架整合Spring需要通过其他工厂调用,最常使用的还是Ioc默认创建bean对象

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值