IOC思想推导:
UserDao 接口
UserDaoImpl 实现类
UserService 业务接口
UserServiceImpl 业务实现类
关联关系(通常将一个类的对象作为另一个类的属性)——组合
//UserDao类 接口类
public interface UserDao {
void getUser();
}
//UserDaoImpl类 实现类
public class UserDaoImpl implements UserDao{
@Override
public void getUser() {
System.out.println("获取用户数据");
}
}
//UserDaoMysqlImpl类 实现类
public class UserDaoMysqlImpl implements UserDao{
@Override
public void getUser() {
System.out.println("获取mysql连接");
}
}
//UserDaoOracleImpl类 实现类
public class UserDaoOracleImpl implements UserDao{
@Override
public void getUser() {
System.out.println("获取oracle连接");
}
}
//UserService 业务接口
public interface UserService {
void getUser();
}
//UserServiceImpl 业务实现类
public class UserServiceImpl implements UserService{
UserDao userDao=new UserDaoOracleImpl();
@Override
public void getUser() {
userDao.getUser();
}
}
//测试类
public class MyTest {
public static void main(String[] args) {
UserService userService=new UserServiceImpl();
userService.getUser();
}
}
上边是原始操作,现在我们使用set注入
//UserDao类 接口类
public interface UserDao {
void getUser();
}
//UserDaoImpl类 实现类
public class UserDaoImpl implements UserDao{
@Override
public void getUser() {
System.out.println("获取用户数据");
}
}
//UserDaoMysqlImpl类 实现类
public class UserDaoMysqlImpl implements UserDao{
@Override
public void getUser() {
System.out.println("获取mysql连接");
}
}
//UserDaoOracleImpl类 实现类
public class UserDaoOracleImpl implements UserDao{
@Override
public void getUser() {
System.out.println("获取oracle连接");
}
}
//UserService 业务接口
public interface UserService {
void getUser();
}
//UserServiceImpl 业务实现类
public class UserServiceImpl implements UserService{
//UserDao userDao=new UserDaoOracleImpl();
private UserDao userDao;
//利用set进行数据动态注入
public void setUserDao(UserDao userDao){
this.userDao=userDao;
}
@Override
public void getUser() {
userDao.getUser();
}
}
//测试类
public class MyTest {
public static void main(String[] args) {
UserService userService=new UserServiceImpl();
((UserServiceImpl) userService).setUserDao(new UserDaoImpl());
userService.getUser();
}
}
之前,程序是主动创建对象,控制权在程序员手中。
现在,使用set注入后(利用set接口进行动态数据注入),程序不再具有主动权,而是被动接收对象,系统耦合性降低,专注于扩展业务上!