IOC

IOC

  • 把对象创建和对象之间的调用过程,交给Spring进行管理
  • 使用IOC的目的 : 我了降低耦合度

IOC的底层原理

通过 XML解析,工厂模式,反射 实现了IOC

  • 第一步 XML配置文件,配置创建的对象
    <bean id="user" class="com.hncj.User"></bean>
  • 第二步 在有service类和dao类,创建工厂类
class UserFactory{
    public static UserDao getDao(){
        // 通过XML解析获取类路径
        String 类路径 = 
        // 通过反射创建对象
        Class clazz = Class.forName("类路径");
        return (UserDao) clazz.newInstance();
    }
}

IOC接口

  • IOC思想基于IOC容器,IOC容器底层就是对象工厂
  • Spring提供IOC容器的两种方式(两个接口 BeanFactory和ApplicationCOntext)

BeanFactory接口

  • BeanFactory是Spring内部的使用接口,不提供开发人员使用
    • 在加载配置文件时不会创建对象,在获取对象才去创建对象

ApplicationContext接口

  • 是BeanFactory的子接口,是提供给开发人员使用的
    • 加载配置文件时候就会把在配置文件对象创建
    • ApplicationContext有子接口

IOC操作

IOC操作Bean管理

  • Spring创建对象 和 Spring属性注入
基于XML配置文件方式实现
  • 基于XML创建对象(默认使用无参构造器创建对象)
    <bean id="user" class="com.hncj.User"></bean>
  • 属性解释:
    1. id是指 唯一标识
    2. class是 类全路径(包类路径)
基于XML注入
  • 基于XML注入属性
    <bean id="user" class="com.hncj.User">
        <!-- 使用property类注入属性 name代表属性变量名 value代表要 -->
        <property name="name" value="小安"></property>
    </bean>
  • 基于XML使用有参构造器注入属性
    <!-- 配置User对象创建 -->
    <bean id="User" class="com.hncj.User">
            <!-- 使用有参构造器 -->
            <constructor-arg name="name" value="小红"></constructor-arg>
    </bean>
  • 基于XML注入空值
    <!-- 配置User对象创建 -->
    <bean id="User" class="com.hncj.User">
            <!-- 注入空值 -->
            <property name="name">
                    <null></null>
            </property>
    </bean>
  • 基于XML注入外部Bean
public interface UserDao {

    void update();
}

public class UserDaoImpl implements UserDao{
    @Override
    public void update() {
        System.out.println("user update");
    }
}

public class UserService {
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public void add(){
        userDao.update();
        System.out.println("Service add");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 1.service 和 dao对象   -->
    <bean id="userservice" class="com.hncj.service.UserService">
        <!-- 在service中注入dao对象,name是service中属性名称 ref为创建Dao的bean的id要确保一致 -->
        <property name="userDao" ref="userdao"></property>
    </bean>
    <bean id="userdao" class="com.hncj.dao.UserDaoImpl"></bean>
</beans>
    @Test
    public void test2(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
        UserService userService = context.getBean("userservice",UserService.class);
        userService.add();
    }
  • 基于XML注入外部Bean
public class Peron {
    private String name;
    private String age;
    private Sex sex;

    public Peron(String name, String age, Sex sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public Peron() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public Sex getSex() {
        return sex;
    }

    public void setSex(Sex sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Peron{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", sex=" + sex +
                '}';
    }
}

public class Sex {
    private String sex;

    public Sex() {
    }

    @Override
    public String toString() {
        return "Sex{" +
                "sex='" + sex + '\'' +
                '}';
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--  Person对象   -->
    <bean id="person" class="com.hncj.beans.Peron">
        <property name="name" value="小王"></property>
        <property name="age" value="12"></property>
        <property name="sex">
            <bean id="sex" class="com.hncj.beans.Sex">
                <property name="sex" value=""></property>
            </bean>
        </property>
    </bean>

</beans>
    @Test
    public void test3(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean3.xml");
        Peron peron = context.getBean("person", Peron.class);
        System.out.println(peron);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

临水而愚

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

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

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

打赏作者

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

抵扣说明:

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

余额充值