IOC相关内容

文章目录

  • Bean的基础配置
  • Bean实例化
  • Bean的生命周期
  • 总结

一、Bean的基础配置

        1. 什么是bean?                                                                                                                                      答:Bean通常用于面向对象编程中,用于表示一个实体或一个业务逻辑的过程实现。在Spring框架中,Bean是指被Spring容器管理的对象。可以通过在Spring配置文件中配置Bean,也可以通过注解的方式将Java类声明为Bean。
        2. bean的基础配置id与class
<bean id = "" class="">

id:  bean的id,使用容器可以通过id值获取对应的bean,在一个容器中id值唯一,bean的唯一标识。

name: Bean的类型,即为配置的bean的全路径类名。

        3.bean的作用范围scope

bean的作用范围分为两种:singleton:单例(默认),prototype:非单例

单例是:eg: 同一个bean获取两次,前后打印出来的地址值一致。

非单例:eg: 同一个bean获取两次,前后打印出来的地址值不一致。

***为什么bean的范围默认单例?***

* bean为单例的意思是在Spring的IOC容器中只会有该类的一个对象
* bean对象只有一个就避免了对象的频繁创建与销毁,达到了bean对象的复用,性能高

二、Bean的实例化

        1. 什么是Bean的实例化?

答:是Spring容器创建bean对象的过程。

        2. 构造方法实例化:
步骤1:准备需要被创建的类

准备一个BookDao和BookDaoImpl类


public interface BookDao {
    public void save();
}

public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println("book dao save ...");
    }

}
步骤2:将类配置到Spring容器
<?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="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>

</beans>
步骤3:编写运行程序
public class AppForInstanceBook {
    public static void main(String[] args) {
        ApplicationContext ctx = new 
            ClassPathXmlApplicationContext("applicationContext.xml");
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        bookDao.save();

    }
}
步骤4:类中提供构造函数测试

在BookDaoImpl类中添加一个无参构造函数,并打印一句话,观察结果。

public class BookDaoImpl implements BookDao {
    public BookDaoImpl() {
        System.out.println("book dao constructor is running ....");
    }
    public void save() {
        System.out.println("book dao save ...");
    }

}

运行程序,如果控制台有打印构造函数中的输出,说明Spring容器在创建对象的时候也走的是构造函数

步骤6:构造函数中添加一个参数测试
public class BookDaoImpl implements BookDao {
    private BookDaoImpl(int i) {
        System.out.println("book dao constructor is running ....");
    }
    public void save() {
        System.out.println("book dao save ...");
    }

}

运行程序,程序会报错,说明Spring底层使用的是类的无参构造方法

综上所述:其实每一个类都会提供一个无参的构造函数,所以此种方式其实什么都不需要编写。(常用方式)

        3. 静态工厂实例化

(1.)创建一个工厂类并且提供一个静态方法。

//静态工厂创建对象
public class OrderDaoFactory {
    public static OrderDao getOrderDao(){
        return new OrderDaoImpl();
    }
}

(2.)在spring的配置文件application.properties中编写如下内容:

<bean id="orderDao" class="com.itheima.factory.OrderDaoFactory" factory-method="getOrderDao"/>

其中:class(工厂类的类全名) factory-method(具体工厂类中创建对象的方法名)

(3.)编写运行类,使用从IOC容器中获取bean的方法进行测试

public class AppForInstanceOrder {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        OrderDao orderDao = (OrderDao) ctx.getBean("orderDao");

        orderDao.save();

    }
}

        4. 实例工厂与FactoryBean

(1.)创建一个Dao和DaoImol

public interface UserDao{
    public void save();
}

public class UserDaoImpl implements UserDao{
      public void save() {
       System.out.println("user dao save...");
    }
}

(2)创建一个工厂类OrderDaoFactory并提供一个普通方法,注意此处和静态工厂的工厂类不一样的地方是方法不是静态方法

public class UserDaoFactory {
    public UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

(3)编写AppForInstanceUser运行类,在类中通过工厂获取对象

public class AppForInstanceUser {
    public static void main(String[] args) {
        //创建实例工厂对象
        UserDaoFactory userDaoFactory = new UserDaoFactory();
        //通过实例工厂对象创建对象
        UserDao userDao = userDaoFactory.getUserDao();
        userDao.save();
}
如何使用FactoryBean?

(1)创建DaoFactoryBean的类,实现FactoryBean接口,重写接口方法。

public class AppForInstanceUser {
    public static void main(String[] args) {
        //创建实例工厂对象
        UserDaoFactory userDaoFactory = new UserDaoFactory();
        //通过实例工厂对象创建对象
        UserDao userDao = userDaoFactory.getUserDao();
        userDao.save();
}

(2)在Spring的配置文件中进行配置(配置bean)

<bean id="userDao" class="com.itheima.factory.UserDaoFactoryBean"/>

FactoryBean接口其实会有三个方法,分别是:

方法一:getObject(),被重写后,在方法中进行对象的创建并返回

方法二:getObjectType(),被重写后,主要返回的是被创建类的Class对象

方法三:没有被重写,因为它已经给了默认值,从方法名中可以看出其作用是设置对象是否为单例,默认true

三、Bean的生命周期

1. 什么是生命周期?

答: 从创建到消亡的整个过程。

2. bean的生命周期是什么?

答: bean对象从创建到销毁的过程。

3. 如何实现?

(1)项目中添加Dao接口、DaoImpl实现类、Service接口和ServiceImpl实现类

public interface Dao {
    public void save();
}

public class DaoImpl implements Dao {
    public void save() {
        System.out.println("book dao save ...");
    }
}

public interface Service {
    public void save();
}

public class ServiceImpl implements Service{
    private BookDao bookDao;

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

    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }
}

(2)resources下提供spring的配置文件(注意:配置文件在resources配置)

<?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="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
</beans>

(3)编写AppForLifeCycle运行类,加载Spring的IOC容器,并从中获取对应的bean对象

public class AppForLifeCycle {
    public static void main( String[] args ) {
        ApplicationContext ctx = new 
        	ClassPathXmlApplicationContext("applicationContext.xml");
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        bookDao.save();
    }
}
生命周期设置
  • bean创建之后,想要添加内容,比如用来初始化需要用到资源

  • bean销毁之前,想要添加内容,比如用来释放用到的资源

步骤1:添加初始化和销毁方法
public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println("book dao save ...");
    }
    //表示bean初始化对应的操作
    public void init(){
        System.out.println("init...");
    }
    //表示bean销毁前对应的操作
    public void destory(){
        System.out.println("destory...");
    }
}
步骤2:配置生命周期
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>

总结

以上就是我对于IOC相关内容的分享,如有不足,感谢评论提出!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值