栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【笔记】IOC和DI入门

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【笔记】IOC和DI入门

IOC作用:管理service和dao,要通过配置文件将被管理的对象告知IOC容器,

操作步骤:

1.需要先导入坐标


    
    
        org.springframework
        spring-context
        5.2.10.RELEASE
    

2.需要定义接口和实现类
3.创建spring配置文件applicationContext.xml
4.在配置文件中配置对应的类作为spring管理的bean对象


 

注意事项:bean标签中的id属性在同一个IOC容器中不能重复

5.初始化IOC容器,通过容器获取Bean对象

  //创建IOC容器对象,加载spring核心配置文件
   ApplicationContext apcx = new         
   ClassPathXmlApplicationContext("applicationContext.xml");
   //获取对应的Bean对象
   AccountDao accountDao = (AccountDao) apcx.getBean("bookService");
   //调用Bean对象的方法
   accountDao.save();

DI作用:基于IOC管理bean

实现步骤:
1.删除使用new创建的对象代码

private BookDao bookDao = new BookDaoImpl(); 保留private BookDao bookDao
2.提供对应的setter方法
3在配置文件中配置service和dao的关系


  
        
    

Bean起别名使用name属性,定义多个名字使用逗号或者空格分隔
Bean的scope属性定义Bean作用范围,默认值为singleton表示单列,prototype表示非单列。意思是多次获取Bean对象如果打印的地址值相同表示单列,不同表示非单列:表示多次获取的对象是同一个

Bean实例化的三种方法

方法1.空参构造:在实现类中定义空参构造,只要不定义带参构造,那么实体类默认的构造方法就是空参构造

方法2.静态工厂:
(1)创建OrderDao接口和OrderDaoImpl实现类

public interface OrderDao {
    public void save();
}
public class OrderDaoImpl implements OrderDao {
    public void save() {
        System.out.println("order dao save ...");
    }
}

(2)创建OrderDaoFatory工厂类

//静态工厂创建对象
public class OrderDaoFactory {
    public static OrderDao getOrderDao(){
        System.out.println("factory setup....");
        return new OrderDaoImpl();
    }


(3)在配置文件中使用静态工厂实例化bean

方法3.实例工厂
(1)创建UserDao接口和UserDaoImpl实现类

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

(2)创建UserDaoFactory工厂类

//实例工厂创建对象
public class UserDaoFactory {
    public UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

(3)在配置文件中配置



Bean生命周期

生命周期的控制

方法1.使用配置文件定义Bean的属性init-method和destroy-method对应的方法

(1)在实现类中定义两个方法,一个是Bean创建后执行的第一个方法,一个Bean销毁前执行的方法

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的init-method和destroy-method的属性


方法2.实现类实现InitializingBean, DisposableBean接口,然后重写接口中的方法

  public void destroy() throws Exception {
        System.out.println("service destroy");
    }
    public void afterPropertiesSet() throws Exception {
        System.out.println("service init");
    }

Bean销毁时机,在关闭容器前销毁bean

关闭容器的方法

方法1.手工关闭ConfigurableApplicationContext接口close()操作
方法2.注册关闭钩子,在虚拟机退出之前,先关闭容器,ConfigurableApplicationContext接口registerShutdownHook()操作

依赖注入

依赖注入的两种方式

1.setter注入(简单类型,引用类型(常用))
setter注入需要注意在实现类中定义set方法

2.构造器注入(简单类型,引用类型)
构造器注入可以使用constructor-arg标签type属性设置按参数类型主注入,也可以使用index属性设置按照参数的位置注入


 

依赖注入的选择
1.强制依赖使用构造器进行,使用setter注入有概率不进行注入导致null对象出现
2.可选依赖使用setter注入进行,灵活性强
3.spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨
4.如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用setter注入完成可选依赖的注入
5.实际可开发过程中还要根据实际情况分析,如果受操控对象没有提供setter方法就必须使用构造器注入
6.推荐使用setter注入
 

自动装配:根据bean所依赖的资源所在容器中自动查找并注入到bean中的过程称为自动装配
 

自动装配的方式

根据类型(常用)
根据名称
根据构造方法
不启用自动装配



依赖自动装配特征

1.自动装配用于引用类型依赖注入,不能对简单类型进行操作
2.使用根据类型装配时(byType)必须保证容器中相同类型的bean唯一,推荐使用
3.使用根据名称装配时(byName)必须保证容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用
4.自动装配优先级低于setter注入和构造器注入,同时出现时自动装配配置失效
 

集合注入


    
        100
        200
        300
    

注入List类型数据


    
        itcast
        itheima
        boxuegu
        chuanzhihui
    

注入Set类型数据


    
        itcast
        itheima
        boxuegu
        boxuegu
    

 注入Map类型数据


    
        
        
        
    

注入Properties类型数据


    
        china
        henan
        kaifeng
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/737522.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号