spring中关于IOC的学习说明

spring中关于IOC的学习说明

ioc的解释说明和理解

IOC(inversion of control): 控制反转,反转的是对象的创建权,用于削减程序之间的耦合关系,底层使用反射技术实现
传统方式创建对象: new 对象(); (主动创建)
IOC方式创建对象: 找容器(被动接收),本质上就是一个Map集合
作用:解耦
1、通过标记(标记就是配置文件中的key)找工厂,工厂帮我们创建对应的类对象,并返回给我们使用
2、当前类可以选择主动出击(new的方式)创建对象,但是此时耦合度高。
3、 把主动式改成被动接收,由工厂对象为当前类生产所必须的关联对象,此时降低了两个类的依赖关系。

代码实现spring中的DI【依赖注入】

Spring中的依赖注入:
注入的方式有三种:
第一种:使用构造方法注入
要求:必须有对应参数列表的构造函数
第二种:使用set方法注入
要求:提供被注入对象的set方法(不需要get方法)
第三种:使用注解注入

注入的数据类型有三类:
    第一类:基本类型和String
    第二类:其他bean类型
        要求:其他bean指的是在spring的配置文件中定义过的bean,或者是用注解注释过的类。
    第三类:复杂类型(集合类型)
        Array: 数组
        List:
        Map:
        Properties:
<!--   配置文件中的数据-->
<?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">


<!--    当采用有参构造进行注入时,class会报错,因为会优先找构造方法,需要给变量赋值即可-->
<!--<bean id="Applocation" class="it.heima.services.impl.ApplocationImpl4">-->
<!--    <constructor-arg name="name" value="杨"></constructor-arg>-->
<!--    <constructor-arg name="id" value="1"></constructor-arg>-->
<!--    <constructor-arg name="age" value="12"></constructor-arg>-->

<!--    <constructor-arg index="1" value="杨"></constructor-arg>-->
<!--    <constructor-arg index="0" value="1"></constructor-arg>-->
<!--    <constructor-arg index="2" value="12"></constructor-arg>-->

<!--</bean>-->


<!--    通过setter的方式进行依赖注入-->
<!--    <bean id="Applocation" class="it.heima.services.impl.ApplocationImpl4">-->
<!--        <property name="name" value="yag"></property>-->
<!--        <property name="id" value="12"></property>-->
<!--        <property name="age" value="12"></property>-->

<!--        ref  代表引用对象。引用的内容需要来自于ioc容器中-->
<!--        <property name="user" ref="user"></property>-->

<!--    </bean>-->
<!--    创建ioc容器,保存数据内容-->
<!--    <bean id="user" class="it.heima.pojo.User">-->
<!--        <property name="password" value="123"></property>-->
<!--        <property name="money" value="12"></property>-->

<!--    </bean>-->



<!--    复杂数据类型-->
    <bean id="Applocation" class="it.heima.services.impl.ApplocationImpl4">
        <property name="names">
            <array>
                <value>小李子</value>
                <value>千玺</value>
            </array>
        </property>

        <property name="list">
            <list>
                <value>柚子</value>
                <value>草莓</value>
            </list>
        </property>

        <property name="map">
            <map>
                <entry key="" value="拉布拉多"></entry>
                <entry key="" value="布偶"></entry>
            </map>
        </property>


        <property name="pro">
            <props>
                <prop key="dagname"> 小七</prop>
                <prop key="catname"> 十一</prop>
            </props>
        </property>

    </bean>

</beans>
package it.test.servlet;

public class ApplocationTest4 {

    @Test
    public void test1(){
        /*
di依赖注入的三种数据类型
            基本数据类型
            其他bean数据类型
            复杂数据类型
         */
        ApplicationContext context =
                new ClassPathXmlApplicationContext("applocationcontact4.xml");

            Applocation applocation =(Applocation) context.getBean("Applocation");
            System.out.println("applocation = " + applocation);
            applocation.add();


    }


}

package it.test.services.impl;


//services中的数据处理--只有setter方法
public class ApplocationImpl4 implements Applocation {

    private int id;
    private String name;
    private String age;
    private User user;

    private String[] names;
    private List<String> list;
    private Map<String,String> map;
    private Properties pro;


    @Override
    public void add() {
        System.out.println("DI-----");
        System.out.println(id+" : "+name+" : "+age);
        System.out.println(user);
        System.out.println(names);
        System.out.println(map);
        System.out.println(list);
        System.out.println(pro);
    }

//    public ApplocationImpl4(int id, String name, String age) {
//        this.id = id;
//        this.name = name;
//        this.age = age;
//    }


    public void setId(int id) {
        this.id = id;
    }

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

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

    public void setUser(User user) {
        this.user = user;
    }


    public void setNames(String[] names) {
        this.names = names;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    public void setPro(Properties pro) {
        this.pro = pro;
    }
}
package it.test.pojo;


//当前特殊类型中的数据
public class User {
        private String password;
        private float money;

    public void setPassword(String password) {
        this.password = password;
    }

    public void setMoney(float money) {
        this.money = money;
    }

    public User(String password, float money) {
        this.password = password;
        this.money = money;
    }

    public User() {
    }

    @Override
    public String toString() {
        return "User{" +
                "password='" + password + '\'' +
                ", money=" + money +
                '}';
    }
}

//面向接口式开发
public interface Applocation {
   void add();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值