天天看点

whxh-SSM框架之Spring1.3 DI依赖注入

Spring 1.3 DI依赖注入

3.1 DI :依赖注入 Dependency Injection

is a 继承

has a 依赖 类A依赖于另一个B(类)对象

依赖 :在一个类中的属性使用另一个类

注入:setter方法赋值

3.2 案例解析

之前:

Class UserServiceImpl{

//以前

private UserDao userDao=new UserServiceImpl();

//依赖

private UserDao userDao;

//注入

Public setUserDao(UserDao userDao)

this.userDao= userDao;

}

3.3 案例过程

1、新建UserDao接口

public interface UserDao {

void saveUser();

}

2、新建UserDaoImpl实现类

public class UserDaoImpl implements UserDao {

@Override

public void saveUser() {

System.out.println(“spring创建了实例,注入了”);

}

}

3.新建UserService接口

public interface UerService {

void saveUser();

}

4.新建UserServiceImpl 实现类

public class UserServiceImpl implements UerService {

// 以前需要创建对象

// private UserDao userDao=new UserDaoImpl();

//现在:进行依赖注入

private UserDao userDao;

//可以使用setter快捷键导入

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

@Override

public void saveUser() {

userDao.saveUser();

}

}

5.resources文件下新建beans.xml文件

<?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">
<!--
    bean  :配置要被创建对象的类/配置由spring容器管理的类
    id:给bean取名,用于获取
    class:类的全限定名
-->
    <!--配置UseServiceImpl-->
    <bean id="userServiceId2" class="com.whxh.test2.UserServiceImpl">
        <!--setter注入:property配置依赖,name为依赖名称,ref注入的另一个bean的id-->
         <property name="userDao" ref="userDaoId"></property>
    </bean>

    <!--配置UseDaoImpl-->
    <bean id="userDaoId" class="com.whxh.test2.UserDaoImpl"></bean>
</beans>
           

6.测试类

public class DITest {

@Test

public void iocTest(){

//创建spring容器

ApplicationContext applicationContext=new ClassPathXmlApplicationContext(“test2/beans2.xml”);

//获取对象

UserServiceImpl userServiceId2 = applicationContext.getBean(“userServiceId2”, UserServiceImpl.class);

userServiceId2.saveUser();

}

}

运行测试类。

3.4 注入方式

1 新建address类

public class Address {

private String tel;

private String addrName;

}

2 新建person类

public class Person {

private String name;

private int age;

private Address homeAddr;

private Address companyAddr;

}

关系图

whxh-SSM框架之Spring1.3 DI依赖注入

3 注入:beans.xml文件代码

<?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">
<!--
    bean  :配置要被创建对象的类/配置由spring容器管理的类
    id:给bean取名,用于获取
    class:类的全限定名
-->
<bean id="personId" class="com.whxh.test3.Person">
    <property name="name" value="赵敏"></property>
    <property name="age" value="18"></property>

    <!--引用类型:ref-->
    <property name="homeAddr" ref="homeAddressId"></property>
    <property name="companyAddr" ref="comAddressId"></property>

</bean>

    <bean id="homeAddressId" class="com.whxh.test3.Address">

        <property name="addrName" value="北京朝阳区"></property>
        <property name="tel" value="110"></property>

    </bean>
    <bean id="comAddressId" class="com.whxh.test3.Address">

        <property name="addrName" value="北京中关村"></property>
        <property name="tel" value="027"></property>

    </bean>
</beans>
           

4 测试类

public class SetTest {

@Test

public void iocTest(){

//创建spring容器

ApplicationContext applicationContext=new ClassPathXmlApplicationContext(“test3/beans3.xml”);

//获取对象

Person person =(Person) applicationContext.getBean(“personId”);

System.out.println("person = " + person);

}

}

运行测试类。

whxh-SSM框架之Spring1.3 DI依赖注入

3.5 list注入案例

1、新建AllData 类 含数组、集合等类型

public class AllData {

private String[] arrayData;

private List listData;

private Set setData;

private Map<String,String> mapData;

private Properties propData;

}

2、注入文件:beans.xml文件代码

<?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">

    <bean id="allDataId" class="com.whxh.test4.AllData">
        <!--
        集合注入(标签):数组  <array>
            list  <list>
            map   <map>
            set    <set>
            properties  <props>
        -->
        <property name="arrayData">
            <array>
                <value>CXK</value>
                <value>蔡徐坤</value>
            </array>
        </property>
        <property name="listData">
            <list>
                <value>JNTM</value>
                <value>鸡你太美</value>
            </list>
        </property>
        <property name="setData">
            <set>
                <value>DS</value>
                <value>屌丝</value>
            </set>
        </property>
        <property name="mapData">
            <map>
                <entry key="王宝强" value="马蓉"></entry>
                <entry key="听风" value="白字"></entry>
            </map>
        </property>
        <property name="propData">
            <props>
                <prop key="张三">18</prop>
                <prop key="李四">28</prop>
            </props>
        </property>
    </bean>
</beans>
           

3 测试类

public class AllDataTest {

@Test

public void iocTest(){

//创建spring容器

ApplicationContext applicationContext=new ClassPathXmlApplicationContext(“test4/beans4.xml”);

//获取对象

AllData allData =(AllData) applicationContext.getBean(“allDataId”);

System.out.println("allData = " + allData);

}

}

4.运行测试类。

whxh-SSM框架之Spring1.3 DI依赖注入