【Spring】Spring 依赖注入

依赖注入

Spring框架的核心功能之一就是通过依赖注入的方式来管理Bean之间的依赖关系。依赖注入使用Spring框架创建对象时动态地将其所依赖的对象注入Bean中,一般常见的依赖注入方式有构造方法注入和setter方法注入。

基于构造方法的依赖注入

创建Spring工程

【Spring】Spring入门案例

创建dao

UserDao接口代码

public interface UserDao {
    public void selectUser();
}

UserDaoImpl实现类代码

public class UserDaoImpl implements  UserDao{
    @Override
    public void selectUser() {
        System.out.println("UserDaoImpl -> selectUser");
    }
}

创建Service

UserService接口代码

public interface UserService {
    public void selectUser();
}

UserServiceImpl实现类代码

public class UserServiceImpl implements UserService{
    private UserDao userDao;

    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void selectUser() {
        userDao.selectUser();
        System.out.println("UserServiceImpl -> selectUser");
    }
}

Spring配置文件

<?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.lucas.dao.UserDaoImpl"/>

    <!--    构造方法注入-->
    <bean id="userService" class="com.lucas.service.UserServiceImpl">
        <constructor-arg index="0" ref="userDao"/>
    </bean>
</beans>

添加测试代码

public class App {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new
                ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService) applicationContext.getBean("userService");
        userService.selectUser();
    }
}

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

工程目录结构
在这里插入图片描述

基本类型注入

创建UserBean

public class UserBean {
    private int age;
    private String name;

    public UserBean(int age, String name) {
        this.age = age;
        this.name = name;
    }

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

Spring配置文件

<?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.lucas.dao.UserDaoImpl"/>
 
    <bean id="userBean" class="com.lucas.UserBean">
        <constructor-arg index="0" value="20"/>
        <constructor-arg index="1" value="张三"/>
    </bean>
</beans>

测试代码

public class App {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new
                ClassPathXmlApplicationContext("applicationContext.xml");
        UserBean userBean = (UserBean) applicationContext.getBean("userBean");
        System.out.println(userBean);
 
    }
}

在这里插入图片描述

基于setter方法的依赖注入

前面的步骤同基于构造方法的依赖注入

只需修改UserServiceImpl,给该类增加一个set方法

public class UserServiceImpl implements UserService{
    private UserDao userDao;

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

    @Override
    public void selectUser() {
        userDao.selectUser();
        System.out.println("UserServiceImpl -> selectUser");
    }
}

修改spring配置文件

<?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.lucas.dao.UserDaoImpl"/>

    <!--    set方法注入-->
    <bean id="userService" class="com.lucas.service.UserServiceImpl">
<!--        <constructor-arg index="0" ref="userDao"/>-->
        <property name="userDao" ref="userDao"/>
    </bean>
</beans>

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

数组和集合注入

创建UserBean

public class UserBean {
    private ArrayList<String> names;
    private String[] names1;

    public ArrayList<String> getNames() {
        return names;
    }

    public void setNames(ArrayList<String> names) {
        this.names = names;
    }

    public String[] getNames1() {
        return names1;
    }

    public void setNames1(String[] names1) {
        this.names1 = names1;
    }

    @Override
    public String toString() {
        return "UserBean{" +
                "names=" + names +
                ", names1=" + Arrays.toString(names1) +
                '}';
    }
}

Spring配置文件

<?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="userBean" class="com.lucas.UserBean">
        <property name="names">
            <list>
                <value >张三</value>
                <value >李四</value>
                <value >王五</value>
            </list>
        </property>
        <property name="names1">
        	<!--list或array都可以-->
            <list>
                <value >张三1</value>
                <value >李四1</value>
                <value >王五1</value>
            </list>
        </property>
    </bean>
</beans>

测试代码

public class App {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new
                ClassPathXmlApplicationContext("applicationContext.xml");

        UserBean userBean = (UserBean) applicationContext.getBean("userBean");
        System.out.println(userBean);
    }
}

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

Map注入

创建UserBean

public class UserBean {
    private Map<String ,String> map;

    public UserBean(){

    }
    public Map<String, String> getMap() {
        return map;
    }

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

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

    @Override
    public String toString() {
        return "UserBean{" +
                "map=" + map +
                '}';
    }
}

Spring配置文件

<?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="userBean" class="com.lucas.UserBean">
        <property name="map">
            <map>
                <entry key="key1" value="value1"/>
                <entry key="key2" value="value2"/>
                <entry key="key3" value="value3"/>
            </map>
        </property>
    </bean>
</beans>

测试代码

public class App {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new
                ClassPathXmlApplicationContext("applicationContext.xml");
        UserBean userBean = (UserBean) applicationContext.getBean("userBean");
        System.out.println(userBean);
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/huweiliyi/article/details/107641095