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 通过属性的名字进行参数赋值
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号