ioc 是spring非常重要的一个特性,就像一个单身男需要一个五姑娘一样重要(老司机应该懂的),
ioc:Inversion of Control的简称,翻译过来就是控制反转,你看到这里第一反应可能就是控制反转是什么东东,好专业的词汇,在这里我就告诉大家,我
他么的也不知道什么意思,我要报警了,就是请个中文八级的翻译估计都翻译不出来,更何况我这种普通花都索(说)不好的淫呢,中文看不懂就看代
码放松放松。首先我们来个面向接口编程
1.userdao接口
public interface UserDao {
public void getUser();
}2.userdao实现类
public class UserDaoPoliceImpl implements UserDao{
@Override
public void getUser() {
System.out.println("公安局查找用户");
}
}3.userService接口
public interface UserService {
public void getUser();
}
4.userService接口实现类
public class UserServiceImpl implements UserService{
private UserDao userDao=new UserDaoPoliceImpl() ;//这里是重点,盯着
@Override
public void getUser() {
userDao.getUser();
}
}
在这里你发现有没有毛病,你是不是想来一举,我操,你有毛病吧,perfect啊!,哪有毛病了,我只想说一句,我操,我要报警,貌似真没毛病,确实,在小项目里面,这样写确实可以,但是在大项目里面领导要是要你把警察查找用户改成民政局查找数据,那你就先写实现类吧。
public class UserDaominzhengImpl implements UserDao{
@Override
public void getUser() {
System.out.println("民政局获取用户");
}
}public class UserServiceImpl implements UserService{
private UserDao userDao=new UserDaominzhengImpl() ;//民政局
@Override
public void getUser() {
userDao.getUser();
}
}
根据需求我们得把有UserPoliceImpl的地方都改成 UserDaominzhengImpl,是不是感觉像被对面五条狗上了高地一样蓝瘦,要是项目大,估计得改到报警,喂!警察吗?我要举报,
private UserDao userDao=new UserDaoPoliceImpl() ;
真的羡慕你看到我的博客了,给了我一次拯救你的机会,你有病,我刚好有药,不要感谢我,欢迎发红包到我qq513422479(开玩笑),好的进入正题,先看代码,这操作是不是很骚,将userdao设置为Null,userdao变量具体是哪个对象的引用由调用setUserDao(UserDao usedao)方法的调用者决定,业务层不管是哪个userdao的实现类,这样业务层和dao层完全隔离,很好的解耦合。
public class UserServiceImpl implements UserService{
//设置为null,具体是哪个对象的引用由调用setUserDao(UserDao userDao)
//的调用者决定,业务层不管,这样业务层就和dao层完全隔离,他们两个谁修改了
//都互不影响,很好的解决了耦合
private UserDao userDao=null;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void getUser() {
userDao.getUser();
}
}接下来我们就写测试类
public class Test {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
userService.setUserDao(new UserDaopoliceImpl());
userService.getUser();
System.out.println("---------------");
userService.setUserDao(new UserDaominzehngImpl());
userService.getUser();
}
}这里就完了,想一想,要是我们把userService.setUserDao(new UserDaoMySqlImpl())方法里面传进去 的对象参数配置在xml文件里面那我们是不是就不需要new 对象了,并且我们把dao层和service层完全分离开,断了亲子关系,你走你的桥,我游我的河,没有任何关系,这样的话dao层和service层代码怎么修改都互不影响,这样可以很好的解耦合,以后妈妈再也不同担心我修改代码了,我操,好神奇,吓死宝宝了,这就是ioc的原理,是不是感觉还不过瘾,预知后事如何请听下次分解,下一节给大家讲讲ioc在我们项目中的作用到底什么?
993

被折叠的 条评论
为什么被折叠?



