spring框架—DI依赖注入(二)

一、set方法的注入
1.介绍

  • a. 在需要注入的类中,定义:个私有的成员变量,并且生成set利get方法
  • b. 在配置文件中,定义该类的bean对象,并且在bean标签中,编写property标签, 给其中name和ref属性进行赋值,该属性具体含义参看课堂代码注释
  • c. 测试

2.代码展示
先写一个UserDao接口:

package com.hnpi.dao;

public interface UserDao {
    void test();
}

实现这个接口的方法:

package com.hnpi.dao.impl;

import com.hnpi.dao.UserDao;

public class UserDaoImpl implements UserDao {

    @Override
    public void test() {
        System.out.println("Hello World!");
    }
}

在写一个UserService接口:

package com.hnpi.service;

public interface UserService {
    void test2();
}

实现这个接口的方法:

package com.hnpi.service.impl;

import com.hnpi.dao.UserDao;
import com.hnpi.service.UserService;

public class UserServiceImpl implements UserService {
    //定义UserDao接口变量
    private UserDao userDao;

    /**
     * UserService接口的方法
     */
    @Override
    public void test2(){
        System.out.println("这是UserService层");
        //调用UserDao接口中的方法
        userDao.test();
    }

    //get和set方法
    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    //无参构造
    public UserServiceImpl() {
        super();
    }

    //有参构造
    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }
}

然后就是配置applicationContext.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="userDao" class="com.hnpi.dao.impl.UserDaoImpl"></bean>

    <bean id="userService" class="com.hnpi.service.impl.UserServiceImpl">
        <!--
            name:类中成员变量名;
            ref:引用IOC容器托管的bean对象;
            类中有多个成员变量名可以写多个<property></property>标签
        -->
        <property name="userDao" ref="userDao"/>

    </bean>
</beans>

最后就是测试类:

package com.hnpi.test;

import com.hnpi.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[] args) {
        //加载applicationContext.xml配置文件
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        //UserService接口的对象,被spring的IOC容器所实例化
        UserService userService = (UserService) ac.getBean("userService");
        userService.test2();
    }
}

测试后,成功调用UserService实现接口中的 test2() 方法,并输出结果:
在这里插入图片描述
二、构造方法注入
只用在applicationContext.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="userDao" class="com.hnpi.dao.impl.UserDaoImpl"></bean>

    <bean id="userService" class="com.hnpi.service.impl.UserServiceImpl">
        <!--
            name:构造方法中成员变量名;
            ref:引用IOC容器托管的bean对象;
            构造方法中有多个成员变量名可以写多个<constructor-arg></constructor-arg>标签
        -->
        <constructor-arg name="userDao" ref="userDao"/>
    </bean>
</beans>

然后也能正常输出结果。

发布了36 篇原创文章 · 获赞 7 · 访问量 2067

猜你喜欢

转载自blog.csdn.net/q_2540638774/article/details/103695176