最近跟着B站的狂神学习了Spring的大概,以前有过写传统JavaWeb的经验,现在也算是进阶学习框架吧,这篇博客主要记录一下Spirng中的两个重要思想之一——IOC,控制反转
大体思想在开发的过程中,当体量较小时,用户需求的变更我们只需要修改几行源代码,目标代码容易找到,且容易修改,逻辑也更容易理解。但当项目的体量逐渐增大,乃至上万行时,每次用户需求的变更,如果按照以往的开发模式,我们需要修改几万行源代码,这明显是不合理的,如何减少需求变更时对源代码的修改,而采用注入的方法来达到目的,这就是IOC的用处。
示例说明并辅助理解 示例一(摘自狂神的视频):JavaWeb开发中的Dao层接口:
package com.kuang.dao;
public interface UserDao {
void getUser();
}
Dao接口的几个实现类:
package com.kuang.dao;
public class UserDaoImpl implements UserDao {
public void getUser() {
System.out.println("默认获取用户的数据");
}
}
package com.kuang.dao;
public class UserDaoMysqlImpl implements UserDao{
@Override
public void getUser() {
System.out.println("Mysql获取用户数据!");
}
}
```java
package com.kuang.dao;
public class UserDaoOracleImpl implements UserDao{
@Override
public void getUser() {
System.out.println("Oracle获取用户数据!");
}
}
package com.kuang.dao;
public class UserDaoSqlserverImpl implements UserDao{
@Override
public void getUser() {
System.out.println("Sqlserver获取用户数据!");
}
}
接下来说Service层的接口,一般都是通过Service层(业务层)去调用Dao层,来完成相关操作:
package com.kuang.service;
public interface UserService {
void getUser();
}
业务层接口的实现类:
package com.kuang.service;
import com.kuang.dao.UserDao;
import com.kuang.dao.UserDaoImpl;
public class UserServiceImpl implements UserService {
// private UserDao userDao = new UserDaoImpl();
private UserDao userDao;
//利用set进行动态实现值的注入!
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
public void getUser() {
userDao.getUser();
}
}
编写的测试类:
import com.kuang.dao.UserDao;
import com.kuang.dao.UserDaoMysqlImpl;
import com.kuang.dao.UserDaoOracleImpl;
import com.kuang.service.UserService;
import com.kuang.service.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String[] args) {
//用户实际调用的是业务层,dao层他们不需要直接接触。
// UserService userService = new UserServiceImpl();
// UserDao userService = new UserDaoMysqlImpl();
// UserDao userService = new UserDaoOracleImpl();
/*UserService userService = new UserServiceImpl();
((UserServiceImpl) userService).setUserDao(new UserDaoMysqlImpl());
((UserServiceImpl) userService).setUserDao(new UserDaoOracleImpl());
userService.getUser();*/
//获取ApplicationContext:拿到Spring的容器
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//容器在手,天下我有,需要什么,就直接get什么!
UserServiceImpl userServiceImpl = (UserServiceImpl) context.getBean("UserServiceImpl");
userServiceImpl.getUser();
}
}
示例二(买果汁):
传统思想
主动创造橙汁,需要我们实现自己可能不太然悉的工作——如何搅拌橙汁, 显然这不是一个好的办法。
原创文章 2获赞 2访问量 430
关注
私信
展开阅读全文
作者:我请求:雨