DI:依赖注入 之 构造方法注入、集合属性注入

一、DI:依赖注入

1、创建两个接口和实现类

//一个Service接口
package cn.tx.service;

public interface OrderService {
    public void saveOrder();
}

//一个Dao接口
package cn.tx.dao;

public interface OrderDao {
    public void saveOrder();
}

//实现类1
import cn.tx.dao.OrderDao;

public class OrderServiceImpl implements OrderService{
    //编写成员属性
    //一定要提供该属性的set方法,IOC容器通过属性的set方法方式  注入值
    private OrderDao orderDao;


    public void saveOrder() {
        System.out.println("业务层:保存订单!!");
        orderDao.saveOrder();
    }

    public void setOrderDao(OrderDao orderDao) {
        this.orderDao = orderDao;
    }
}

//实现类2

package cn.tx.dao;

public class OrderDaoImpl implements OrderDao{
    public void saveOrder() {
        System.out.println("持久层:保存订单!!");
    }
}

2、创建好接口和实现类,现在配置 applicationContext

applicationContext的配置

   property:  set方式的依赖注入 使用的标签是property
    name为属性名
    ref:如果是对象类型 使用ref=“其他需要依赖的bean的id” 来赋值
    value: IOC容器的赋值:如果是简单类型(8个基本+String) 使用value赋值
<bean id="os" class="cn.tx.service.OrderServiceImpl">
   <property name="orderDao" ref="od" />
</bean>
<bean id="od" class="cn.tx.dao.OrderDaoImpl"/>

3、测试类

@Test
public void run1(){
    ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
    OrderService os= (OrderService) ac.getBean("os");
    os.saveOrder();
}

运行结果:
在这里插入图片描述

二、属性的构造方法的方式注入

1、创建一个构造方法Car

package cn.tx.demo2;

public class Car {
    //名称
    private String cname;
    //价钱
    private Double money;

    public Car(String cname, Double money) {
        this.cname = cname;
        this.money = money;
    }

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


}

2、配置applicationContext

 通过<constructor-arg>来进行注入 如果<constructor-arg>的顺序与构造方法的顺序不一致,则需要通过type或者index或name来指定
<!--属性的构造方法的方式-->
<bean id="car" class="cn.tx.demo2.Car">
   <constructor-arg name="cname" value="宝马"/>
   <constructor-arg name="money" value="800000"/>
</bean>

3、测试类

@Test
public void run2(){
    ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
    Car car= (Car) ac.getBean("car");
    System.out.println(car);
}

运行结果:
在这里插入图片描述

三、依赖注入之集合属性注入

1、创建一个类

package cn.tx.demo3;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;

public class CollectionBean {
    //数组
    private String[] strs;
    //list集合
    private List<String> list;
    //map集合
    private Map<String,String> map;
    //properties
    private Properties properties;

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

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

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

    public void setStrs(String[] strs) {
        this.strs = strs;
    }

    @Override
    public String toString() {
        return "CollectionBean{" +
                "strs=" + Arrays.toString(strs) +
                ", list=" + list +
                ", map=" + map +
                ", properties=" + properties +
                '}';
    }
}

2、配置applicationContext

<!--给集合属性注入值-->
<bean id="collectionBean" class="cn.tx.demo3.CollectionBean">
   <property name="strs">
      <array>
         <value>fu</value>
         <value>jiashi</value>
      </array>
   </property>

   <property name="list">
      <list>
         <value>aa</value>
         <value>bb</value>
      </list>
   </property>

   <property name="map">
      <map>
         <entry key="ccc" value="老王"/>
         <entry key="ddd" value="小美"/>
      </map>
   </property>

   <property name="properties">
      <props>
         <prop key="usename">fujiashi</prop>
         <prop key="password">123456</prop>
      </props>
   </property>
</bean>

3、测试类

@Test
public void run3(){
    ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
    CollectionBean bean= (CollectionBean) ac.getBean("collectionBean");
    System.out.println(bean);
}

4、测试结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44001568/article/details/105753867