二、Spring IoC 容器

IOC容器及相关概念

什么是 IOC

  1. 控制反转,把对象创建和对象之间的调用过程,交给 Spring 容器来管理。
  2. 使用 IOC 的目的,为了解耦合。 

IOC 的底层原理 

XML、解析技术、工厂模式、反射

IOC 目的 

最低限度降低类与类之间的耦合度

IOC 实现 

  1.   IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂。
  2. Spring 提供了 IOC 容器两种实现方式
  •  (1) BeanFactory:IOC 容器基本实现接口,是 Spring 内部使用 的接口,不提供给开发人员使用 
  • (2) ApplicationContext:BeanFatory 接口的子接口,提供了更 多更强大的功能,一般由开发人员来使用

 IOC 操作:Bean 管理

在bean标签中有很多属性,介绍常用属性 

  • id属性:唯一标识
  • class属性:类全路径(包+类路径)
  • name属性:类似于id的作用,struts2框架提供的属性,被id属性代替. 

bean标签创建对象时,默认执行的是无参构造器完成对象创建 

什么是 Bean 管理 

  •  Spring 创建对象 
  • Spring 注入属性 

 Bean 管理操作的两种实现方式

  • 基于 XML 配置文件的方式
  • 基于注解方式 

Bean标签范围配置 

 1.当scope=“singleton”时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置Bean实例。
Bean的生命周期:

  • 对象创建:当应用加载,创建容器时,对象就被创建了
  • 对象运行:只要容器在,对象就一直活着
  • 对象销毁:当应用卸载,销毁容器时,对象就被销毁

2.当scope=“prototype”时
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
Bean的生命周期:

  • 对象创建:当使用对象时,创建新的对象实例
  • 对象运行:只要对象在使用中,就一直活着
  • 对象销毁:当对象长时间不用时,被Java的垃圾回收器回收了

 Bean生命周期配置

  •  init-method:指定类中的初始化方法名称
  • destory-method:指定类中销毁方法名称

Bean实例化的三种方法 

  •   无参构造方法实例化
  • 工厂静态方法实例化
  • 工厂实例方法实例化 

无参构造方法实例化代码演示

(1)创建接口

public interface UserDao {
    public void save();
}

 (2)实现接口方法

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

 (3)配置xml文件

 <bean id="userDao" class="com.wzx.dao.impl.UserDaoImpl">

 </bean>

 (4)测试方法

public class UserDaoDemo {
    public static void main(String[] args) {
        ApplicationContext app=
                new ClassPathXmlApplicationContext("bean02.xml");
        UserDao userDao= (UserDao) app.getBean("userDao");
        userDao.save();

    }
}

 (5)运行结果

 

 工厂静态方法实例化代码演示:在无参构造的基础上修改

(1)创建静态工厂类 

public class StaticFactory {
    //静态方法
    public static UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

 (2)修改xml配置文件

 <bean id="userDao" class="com.wzx.factory.StaticFactory" 
 factory-method="getUserDao">
 </bean>

 工厂实例方法实例化代码演示:在无参构造的基础上修改

(1)创建工厂对象 

public class DynamicFactory {
    //不是静态的
    public UserDao getUserDao() {
        return new UserDaoImpl();
    }
}

 (2)修改xml配置文件

   <bean id="factory" class="com.wzx.factory.DynamicFactory"></bean>
    <bean id="userDao" factory-bean="factory" 
    factory-method="getUserDao"></bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

享受当下.26

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

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

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

打赏作者

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

抵扣说明:

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

余额充值