IoC创建对象的方式

IoC创建对象的方式

概述

本文主要讲解基于构造器的依赖注入,如果需要通过有参构造器来创建对象,有三种方式,其中第三种通过名字来赋值的之中方式是最常见,最好用的

基于构造器的三种创建对象的方式

基本代码
UserDao

package com.kuangstudy.dao;

/**
 * 功能描述
 *
 * @since 2022-06-24
 */
public interface UserDao {
    void getUser();
}

UserDaoMysqlImpl

package com.kuangstudy.dao;

/**
 * 功能描述
 *
 * @since 2022-06-24
 */
public class UserDaoMysqlImpl implements UserDao {
    @Override
    public void getUser() {
        System.out.println("mysqlImpl");
    }
}

UserDaoOracleImpl

package com.kuangstudy.dao;

/**
 * 功能描述
 *
 * @since 2022-06-24
 */
public class UserDaoOracleImpl implements UserDao {
    @Override
    public void getUser() {
        System.out.println("OracleImpl");
    }
}

UserService

package com.kuangstudy.service;

/**
 * 功能描述
 *
 * @since 2022-06-24
 */
public interface UserService {
    void getUser();
}

UserServiceImpl

package com.kuangstudy.service;

import com.kuangstudy.dao.UserDao;

/**
 * 功能描述
 *
 * @since 2022-06-24
 */
public class UserServiceImpl implements UserService {
    private UserDao userDao;

    public UserServiceImpl() {
        System.out.println("UserServiceImpl 无参构造");
    }

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

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

    @Override
    public void getUser() {
        userDao.getUser();
    }
}

MainTest 测试类

package com.kuangstudy;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.kuangstudy.service.UserService;

/**
 * 功能描述
 *
 * @since 2022-06-24
 */
public class MainTest {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
        UserService userService = (UserService) applicationContext.getBean("userService");
        userService.getUser();
    }
}

1. 通过index创建

<!--    1.使用index构建-->
<bean id="userService" class="com.kuangstudy.service.UserServiceImpl">
    <constructor-arg index="0" ref="oracleDao"></constructor-arg>
</bean>

index 表示有参构造中参数的下标 ref表示引用其他的对象,如果是基本类型,可以用value直接赋值

2. 通过类型匹配创建

<bean id="userService" class="com.kuangstudy.service.UserServiceImpl">
    <constructor-arg type="com.kuangstudy.dao.UserDao" ref="mysqlDao"></constructor-arg>
</bean>

type 表示给参数类型为com.kuangstudy.dao.UserDao类型的参数赋值,根据类型来判断

3. 通过名字创建

<!--    3.使用名字构建-->
<bean id="userService" class="com.kuangstudy.service.UserServiceImpl">
    <constructor-arg name="userDao" ref="oracleDao"></constructor-arg>
</bean>
name 通过属性的名字进行参数赋值
posted @ 2022-06-24 16:33  Oh,mydream!  阅读(42)  评论(0编辑  收藏  举报