Spring入门(3)-IOC的bean作用域、bean生命周期

1. IOC的Bean管理

在Spring中有两种类型的Bean,一种是普通Bean另一种是工厂Bean;

  1. 普通bean:定义什么类型,那么创建对象时就是什么类型;

  2. 工厂bean:在配置文件时bean类型可以和返回的类型不一样;
    主要是需要实现一个接口(FactoryBean),然后实现其中的方法getObject,这样就可以使得,配置文件中定义的类和自己获得的类类型不一致了;
    如下:
    创建一个实现FactoryBean接口的类;

public class MyBook implements FactoryBean {
    @Override
    public Object getObject() throws Exception {
        /*这个类就是用来返回你这个类在配置文件中进行配置后
        需要返回的类;所以想返回什么类,在这里return什么类
        就可以了;当然这个也可以添加泛型;
        如下: 我想通过这个类返回一个Book类;
        */
        Book book = new Book();
        book.setBname("骆驼祥子");
        return book;
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }
}

配置文件的书写:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<!--这里就只是创建了一个MyBook类的对象-->
  <bean id="myBook" class="cn.dxs.OnCollection.MyBook"/>
</beans>

测试类:

public class TestMyBook {
    @Test
    public void test(){
    //解析配置文件,但是路径一定要对;
        ApplicationContext context = new ClassPathXmlApplicationContext("cn/dxs/xml/Bookconfig.xml");
        //由于这里获得的是Book类,所以设置好;
        Book myBook = context.getBean("myBook", Book.class);
        System.out.println(myBook);
    }
}

运行后的结果:确实没有问题;

2. IOC中Bean的作用域

2.1 Bean中的对象是单实例对象(默认)

单实例,就是说所有通过这个配置文件创建出来的对象都是一样的,就是一种单例模式;当然这是默认情况下,还有一种就是


将默认的单实例对象修改为多实例对象,主要用到的bean标签中的属性:scope;
如下:

再次运行上面的代码,果然两个对象的地址已经不一样了;

scope属性主要有两个值,一个是singleton(单个实例对象),在解析配置文件时,同时已经创建了对象;一个是prototype(多实例对象),只有在getBean的时候才开始创建对象;这两个就有点类似于非延时加载,和延时加载;


3. 在IOC中Bean的生命周期

Bean的生命周期:
第一步:先要创建通过构造器创建一个bean实例(无参构造函数)
第二步:为bean的各项属性添加值(也可以引用其它的bean,主要使用的时set方法)

public class Book {
    //在这个类里面创建一个简单属性;
    String Bname;
    //创建一个无参构造函数;
    public Book(){
        System.out.println("1.创建一个构造函数");
    }
    @Override
    public String toString() {
        return "Book{" +
                "Bname='" + Bname + '\'' +
                '}';
    }
    //创建一个set方法
    public void setBname(String bname) {
        System.out.println("2.通过set方法创建属性");
        Bname = bname;
    }
    //定义一个初始化的方法;
    public void initbook(){
        System.out.println("3.假定这是一个初始化的方法");
    }
    public void destroy(){
        System.out.println("5.假定这是销时后的才执行的方法");
    }
}

第三步:调用Bean的初始化方法(目前不怎么清楚有什么用)

第四步:获取了Bean对象
第五步:容器关闭,对Bean进行销毁

    @Test
    public void test(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("cn/dxs/xml/Bookconfig.xml");
        System.out.println("第四步,这里获得了对象");
        //由于这里获得的是Book类,所以设置好;
        Book book = context.getBean("book", Book.class);
        System.out.println(book);
        //关闭,只有ApplicationContext接口的实现类有;
        context.close();
    }

运行的结果(正好是这个方向,从开始到销毁)

3.1 bean的后置处理器

创建后置处理器需要使用到接口BeanPostProcessor;当将后置处理器放入时,Bean的生命周期就有了7步
创建一个类(后置处理器)

再次在配置文件中进行配置:

运行之后的结果:

所以在拥有后置处理器之后,Bean的生命周期就已经有了7步;

  1. IOC中的XML自动装配
    概念:根据指定的装配规则(属性名或者属性类型),Spring自动将匹配的属性值注入;就比如以前插入属性可能需要使用Property标签,现在有了新方法;(现在应用主要是用来导入另一个类作为属性)

4. 在配置文件中引入外部的属性文件

这个在xml配置文件中,一般引入外部文件,比如说,你要连接数据库,这时,你可以先将连接的用户名,密码全部放在外部的properties文件里面,方便读取;
将外部的属性文件引入到Spring配置文件中:

引入context的名称空间:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘的天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值