1.创建项目
2.往pom.xml(spring-study)中导包
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
</dependencies>
3.创建接口类UserDao和对应实现类UserDaoImpl
package com.kuang.dao;
public interface UserDao {
void getUser();
}
Impl要实现其接口
package com.kuang.dao;
//Impl要实现其接口
public class UserDaoImpl implements UserDao{
public void main(String[] args) {
getUser();
}
public void getUser() {
System.out.println("默认获取用户的数据");
}
}
4.创建实现类UserService和UserServiceImpl
package com.kuang.service;
public interface UserService {
void getUser();
}
业务层调Dao层
package com.kuang.service;
import com.kuang.dao.UserDao;
import com.kuang.dao.UserDaoImpl;
public class UserServiceImpl implements UserService{
private UserDao userDao = new UserDaoImpl();
public void getUser(){
userDao.getUser();
}
}
5.在java包下创建测试类MyTest
import com.kuang.dao.UserDaoMysqlImpl;
import com.kuang.service.UserService;
import com.kuang.service.UserServiceImpl;
public class MyTest {
public static void main(String[] args) {
//用户实际调用的是业务层,dao层他们不需要接触!
UserService userService = new UserServiceImpl();
userService.getUser();
}
}
问题:如果Dao层中加了一个UserDaoMysqlImpl或UserDaoOracleImpl并需要调用
就要修改UserServiceImpl中的
private UserDao userDao = new UserDaoImpl();
将UserDaoImpl改为UserDaoMysqlImpl或UserDaoOracleImpl,违背开闭原则
解决:更改UserServiceImpl为
package com.kuang.service;
import com.kuang.dao.UserDao;
import com.kuang.dao.UserDaoImpl;
public class UserServiceImpl implements UserService{
private UserDao userDao;
//利用set进行动态实现值的注入!
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void getUser(){
userDao.getUser();
}
}
再修改测试类
import com.kuang.dao.UserDaoMysqlImpl;
import com.kuang.service.UserService;
import com.kuang.service.UserServiceImpl;
public class MyTest {
public static void main(String[] args) {
//用户实际调用的是业务层,dao层他们不需要接触!
UserService userService = new UserServiceImpl();
((UserServiceImpl) userService).setUserDao(new UserDaoMysqlImpl());
userService.getUser();
}
}
这样就可以只修改里面的 UserDaoMysqlImpl为用户需要的方法即可(选择权交给用户,而基本实现留在自己)
((UserServiceImpl) userService).setUserDao(new UserDaoMysqlImpl());