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 通过属性的名字进行参数赋值