springIOC、bean管理

什么是IOC

  • 控制反转,将对象的创建交给spring
  • 目的:降低耦合

IOC实现过程

xml解析 + 反射 + 工厂模式

  1. 在xml中配置对象
  2. 读取xml文件中的class属性找到类
  3. 利用反射创建对象

IOC2个接口

  1. BeanFactory IOC容器的基本实现,一般情况是Spring内部使用的接口,不提供开发人员使用

特点:加载配置文件的时候,不会创建对象,在获取对象,使用对象的时候才会去创建对象。

  1. ApplicationContext 是BeanFactory的子接口,提供更强大的功能,一般由开发人员使用

特点:加载配置文件的时候会将配置文件中的对象进行创建。

Bean管理

指创建对象和注入属性两个操作。

xml配置文件方式

    <!--1 配置User对象创建-->
    <bean id="user" class="com.atguigu.spring5.User"></bean>

    <!--2 set方法注入属性-->
    <bean id="book" class="com.atguigu.spring5.Book">
        <!--使用property完成属性注入
            name:类里面属性名称
            value:向属性注入的值
        -->
        <property name="bname" value="易筋经"></property>
        <property name="bauthor" value="达摩老祖"></property>
        <!--null值-->
        <!--<property name="address">
            <null/>
        </property>-->

        <!--属性值包含特殊符号
            1 把<>进行转义 &lt; &gt;
            2 把带特殊符号内容写到CDATA
        -->
        <property name="address">
            <value><![CDATA[<<南京>>]]></value>
        </property>
    </bean>

    <!--3 有参数构造注入属性-->
    <bean id="orders" class="com.atguigu.spring5.Orders">
        <constructor-arg name="oname" value="电脑"></constructor-arg>
        <constructor-arg name="address" value="China"></constructor-arg>
    </bean>

    <!--2 set方法注入属性-->
    <bean id="book" class="com.atguigu.spring5.Book" p:bname="九阳神功" p:bauthor="无名氏">
    </bean>
  • 创建对象的时候,默认使用无参构造方法完成对象的创建
  • 在spring配置文件中使用bean标签,标签中添加对应属性就可以实现对象创建。
  • id属性:就相当于给这个bean取名、(唯一标识)
  • class属性:就是这个类的包路径
  1. xml注入属性

DI: 依赖注入

  • 使用set方法进行注入
  • 有参构造器注入

注入外部类

//(1)创建两个类 service 类和 dao 类 
//(2)在 service 调用 dao 里面的方法
//(3)在 spring 配置文件中进行配置

public class UserService {
 //创建 UserDao 类型属性,生成 set 方法
 private UserDao userDao;
 public void setUserDao(UserDao userDao) {
 this.userDao = userDao;
 }
 public void add() {
 System.out.println("service add...............");
 userDao.update();
 } }
<!--1 service 和 dao 对象创建--> <bean id="userService" class="com.atguigu.spring5.service.UserService">
 <!--注入 userDao 对象
 name 属性:类里面属性名称
 ref 属性:创建 userDao 对象 bean 标签 id 值
 -->
 <property name="userDao" ref="userDaoImpl"></property>
</bean> <bean id="userDaoImpl" class="com.atguigu.spring5.dao.UserDaoImpl"></bean>

注解方式实现

spring 提供注解来实现对象创建

  • @Component
  • @Service
  • @Conrtoller
  • @Repository

属性注入注解

  • @AutoWried: 根据属性类型进行自动注入
  • @Qualifier:根据属性名称进行注入
  • @Resource:可以根据类型也可以根据名称注入

bean的作用域

在spring中可以设置bean实例还是单实例

  • 默认情况是单实例对象
  • 通过 scope属性进行设置 属性值: singleton、prototype、request、session
  • singleton和prototype的区别,一个单实例、一个多实例
  • singleton特点:加载配置文件的时候就会创建对象
  • prototype特点:获取对象时候才会进行创建新的对象
  • request、session很少使用,一次请求,和一次会话

bean的生命周期

  1. 通过构造器创建实例(无参)
  2. 为bean属性设置初始化值和对其他bean的引用
  3. 调用bean的初始化方法(需要配置 init)
  4. bean可以被使用了
  5. 容器关闭的时候,销毁bean,调用销毁方法(需要配置 destory)

bean 的后置处理器,bean 生命周期有七步

  1. 通过构造器创建 bean 实例(无参数构造)
  2. 为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
  3. 把 bean 实例传递 bean 后置处理器的方法 postProcessBeforeInitialization
  4. 调用 bean 的初始化的方法(需要进行配置初始化的方法)
  5. bean 实例传递 bean 后置处理器的方法 postProcessAfterInitialization
  6. bean 可以使用了(对象获取到了)
  7. 当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)
posted @ 2021-04-21 17:09  永真  阅读(72)  评论(0)    收藏  举报