【spring(一)】核心容器总结

键盘敲烂,年薪30万

 

目录

IOC 配置bean对象:

DI 注入bean对象

①.setter方法注入

②.构造器注入

Bean的实例化

1.setter方法注入(重点)

2.静态工厂(了解)

3.实例工厂(了解)

4.FactoryBean方式注入(重点)

bean的声明周期

bean的自动装配

管理第三方的bean


IOC 配置bean对象:

配置文件配置bean

        id:bean的名称

        class:bean的类型

DI 注入bean对象

①.setter方法注入

        setter方法注入 使用 标签,通过set方法为bean对象赋值,推荐使用

注入引用类型

        name = "xxx" ref = "xxx"

        name后面要与set方法的形参保持一致,ref要与bean的id保持一致


    

 注入基本数据类型

        name = "xxx" value = "xxx"


    

注入集合数组等类型

        当集合类型进行注入时,使用相应标签(list、set、array、map...)对属性值进行注入。


  
    
      10
      11
      12
    
    
  
 
②.构造器注入

        构造器注入,使用标签,在整合第三方框架的时候使用


    

    setter注入和构造器注入并无太大区别,一个是运用setter方法,一个是运用构造器,构造器注入将properties标签改完constructor-arg 即可。

Bean的实例化

1.setter方法注入(重点)

        在相应类中提供set方法

public class BookServiceImpl implements Bookservice {
    BookDao bookDao;
    @Override
    public void save() {
        System.out.println("Bookservice save is running");
        bookDao.save();
    }

    //提供set方法
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}
2.静态工厂(了解)
public class BookDao1Factory {
    public static BookDao1 getBookDao1(){
        System.out.println("BookDao1Factory null constructor is running");
        return new BookDao1Impl();
    }
}
3.实例工厂(了解)

        跟setter方法冗余,不再赘述。

4.FactoryBean方式注入(重点)

        创建一个FactoryBean的类,实现factorybean接口,用于实例化bean对象,通过getObject创建对象,getObjectType指定对象类型。

package itpan.factory;

import itpan.Dao.BookDao1;
import itpan.Dao.impl.BookDao1Impl;
import org.springframework.beans.factory.FactoryBean;

public class BookDao1FactoryBean implements FactoryBean {
    // 替代静态静态工厂中的get方法
    @Override
    public BookDao1 getObject() throws Exception {
        return new BookDao1Impl();
    }

    // 创建的bean是什么类型的
    @Override
    public Class getObjectType() {
        return BookDao1.class;
    }
}

 

bean的声明周期

  • 执行构造方法实例化bean对象
  • 设置属性
  • 初始化
  • 关闭容器bean自动销毁

例如以下程序:

package itpan.Dao.impl;

import itpan.Dao.BookDao1;
import itpan.Dao.BookDao2;
import itpan.Dao.BookDao3;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class BookDao1Impl implements BookDao1, InitializingBean, DisposableBean {
    BookDao2 bookDao2;
    BookDao3 bookDao3;

    public void setBookDao2(BookDao2 bookDao2) {
        this.bookDao2 = bookDao2;
    }

    public void setBookDao3(BookDao3 bookDao3) {
        this.bookDao3 = bookDao3;
    }

    public void save() {
        System.out.println("bookdao1 is running");
        bookDao2.save();
        bookDao3.save();
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("dao init...");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("dao close...");
    }
}

测试类:

package itpan;

import itpan.Dao.BookDao1;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestBeanCycle {
    public static void main(String[] args) {
        // bean的生命周期
        // 1.new bean
        // 2.执行构造方法
        // 3.set设置属性
        // 4.init初始化bean

        // 容器关闭触发bean的销毁
        // 两种方法
        // 1.手工关闭 2.注册关闭钩子
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 设置关闭钩子
        ctx.registerShutdownHook();

        BookDao1 bookDao1 = (BookDao1) ctx.getBean("bookDao1");
        bookDao1.save();
//        ctx.close();
    }
}

注意:

创建bean对象默认调用空参构造,如果没有空参构造,程序会抛出异常。

bean的自动装配

很简单,在配置bean对象时将autowrie属性设置为true

管理第三方的bean

1.引入properties文件

2.开启context命名空间

3.使用context:property-placeholder加载命名空间




    
    
    
    

    
        
        
        
        
    

你可能感兴趣的:(spring,spring,java,后端)