原来创建对象的方式
1.先写UserDao接口
public interface UserDao {
void getUser();
}
2.写Dao的实现类
public class UserDaoImpl implements UserDao{
public void getUser() {
System.out.println("获取用户数据");
}
}
3.写业务层UserService接口
public interface UserService {
void getUser();
}
4.写Service的实现类
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl();
@Override
public void getUser() {
userDao.getUser();
}
}
5.测试
public void test(){
UserService service = new UserServiceImpl();
service.getUser();
}
这里思考一个问题就是:如果再增加一个UserDao的实现类,那么就需要取UserServiceImpl 类中取修改为: new 另一个对象
private UserDao userDao = new UserDaoImpl();
解决办法 使用Ioc控制反转
将创建对象实例的方式从service层转交的用户层,让用户自己去觉得要创建哪一个Dao的实现类 ## Spring 中的Ioc控制反转 导入jar包或者maven<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.6</version>
</dependency>
1.先写UserDao接口
2.写Dao的实现类
3.写业务层UserService接口
4.写Service的实现类
5.编写beans.xml文件
<?xml version="1.0" encoding="UTF8"?>
<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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="MysqlImpl" class="com.shadow.dao.UserDaoMysqlImpl"/>
<bean id="OracleImpl" class="com.shadow.dao.UserDaoOracleImpl"/>
<bean id="SqlserverImpl" class="com.shadow.dao.UserDaoSqlserverImpl"/>
<bean id="userServiceImpl" class="com.shadow.service.UserServiceImpl">
<!-- ref:引用Spring容器中创建的对象
value:具体的值,基本的数据类型
-->
<property name="userDao" ref="SqlserverImpl"/>
</bean>
</beans>
6.测试MyTest
//通过Spring配置文件来进行创建对象
public static void main(String[] args) {
//获取ApplicationContext
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//需要什么就直接get什么
UserServiceImpl userServiceImpl = (UserServiceImpl) context.getBean("userServiceImpl");
userServiceImpl.getUser();
}
俩种方式的区别
原先的方式
每次创建了新的Dao实现类,都需要去修改Service层的new 对象。
Spring 的Ioc控制反转
每次创建了新的Dao实现类,只需要去xml配置文件中添加
<bean id="" class=""/>
然后修改就可以了
<bean id="userServiceImpl" class="com.shadow.service.UserServiceImpl">
<!-- ref:引用Spring容器中创建的对象
value:具体的值,基本的数据类型
-->
<property name="userDao" ref="SqlserverImpl"/>
</bean>