Spring IOC原型
Spring 两大核心 IOC AOP
什么是IOC
Inversion of Control的缩写,翻译为 控制反转,
以理论难以概述IOC是什么,所以这里用原型来解释怎么实现控制反转。
代码实现IOC原型
这里模拟一组业务
实现步骤
1、编写Dao接口,并且编写两个实现接口,各自完成不同的业务
public interface UserDao {
void getUser();
}
public class UserDaoImpl implements UserDao {
public void getUser() {
System.out.println("通过UserDaoImpl查询所有数据");
}
}
public class UserDaoMySQLImpl implements UserDao {
@Override
public void getUser() {
System.out.println("通过UserDaoMySQLImpl查询数据");
}
}
2、编写service层代码(接口+ 接口实现类,面向接口编程)
public interface UserService {
void getUser();
}
public class UserServiceImpl implements UserService {
// 传统方法
private UserDao userDao= new UserDaoImpl();
private UserDao mysqlDao= new UserDaoMySQLImpl();
// 依赖注入方法
private UserDao dao1;
public void setDao1(UserDao dao1) {
this.dao1 = dao1;
}
@Override
public void getUserDao() {
userDao.getUser();
}
@Override
public void getUser() {
dao1.getUser();
}
}
3、测试
public class UserDaoTest {
@Test
public void Test1(){
//传统方法
UserServiceImpl userService = new UserServiceImpl();
userService.getUserDao();
// 依赖注入的方法
UserServiceImpl userService2 = new UserServiceImpl();
userService.setDao1(new UserDaoImpl());
userService2.getUser();
}
}
如果仔细阅读service层代码,可以发现我用了两种方式来调用dao层。
传统方法是在service层直接new出要指定的Dao,这样做的代码耦合性太高了;假设我再添加一个Dao,service再次调用时就需要改动原有代码去调用该Dao。
第二种方法 就是采用set方法来实现,把调用哪个dao的控制权交给了用户,即为控制反转。
以上就是IOC原型。