spring(2)
两个核心的概念
IOC 控制发展 依赖注入
本来是程序员要实例化对象,把这个任务交(Spring 框架)
框架帮我们实例化对象,我们从容器中获取即可
这个就叫做控制反转。
非要用一个词描述spring框架
解耦
怎么降低程序之间的依赖?
controlle ----service --dao
通过案例来看,解耦合
解耦合
后面写代码都是 controlle ----service --dao。
servlet -----controller controller对servlet做 进一步的封装,用起来更加的方便
控制器
service :业务逻辑,主要写业务逻辑的
dao:基本的简单的数据库的增删改查操作
这个层的额操作讲究是通用的,不会涉及到具体的业务逻辑
一到涉及到具体的业务逻辑,就不同用了。
通用度比较高,那么dao层的代码量就会比较少
认为 Service和dao是重复的,要一个即可?
例如:转账操作
在service层中是一个业务逻辑,定义一个转账方法即可
在dao层中是两个操作
在service层要调用两个dao方法
难道没有复杂的业务逻辑吗?
一般把复杂的操作变成n个简单的操作
之前学的是。尽量用一个复杂sql实现复杂的功能,做题
复杂的逻辑没拆成n个简单的操作,为了实现底层的代码的通用性 工作
等到后期,dao层代码基本不需要写,苞米豆已经帮我们写完了
我们只需要写极个别的复杂的需求的代码即可
具备拆的能力
例子:查询三年二班 所有学生的成绩
一步:
select*from stu,grade where stu.gid=grade.gid and gname="三年二班"
二步
根据班级字查询id
select gid from grade where gname = “三年级二班”
根据gid查询学生表中所有学生的成绩
select*from stu where stu.gid="刚才查询的id";
1.为什么要拆?
后期要用别人的代码,实现数据库的各种操作。
然后翻看人家的代码发现基本都是单张表按操作,
所以我们为了能少写代码,多用别人的代码,我们把复杂的逻辑变成
n个简单的数据库单表操作,顺便提高代码的执行效率
2.为什么不写多张表的操作,这样我们程序员用起来更加的方便
只要涉及多张表的操作,一般会存在对应的业务逻辑
人家是没法预测具体的业务逻辑的,所以之中代码不好实现
人家苞米豆团队写的代码一定是通用的,不只是只对你自己的代码jie'ou
如果真的需要多张表的,而且我们假设没法再拆分,一定是多表操作,怎么办
老老实实的自己写dao层的代码,自己调用即可
一句话。能用别人的就用别人的,是在没办法在自己写
目前来说是单独的存在的,不存在关联关系
要让userDao作为一个属性值,注入到userService中
重点:代码中我们并没有实例化 userDao,但是可以调用
是因为我们在配置文件中实例化了userDao 并把此对象作为属性注入到了service 中
代码写完了 ,考虑一个问题,这样写究竟会带来什么好处?
解耦,让代码更加的灵活
例如:随着版本的迭代,发现UserDao写的不够好,想替代它
把当前类表示过时,,写一个新的类替换
我们可以用新的方式
在配置文件中重新配置即可
不需要修改代码‘
张才说了 设值注入,调用set方法实现对象的注入
构造注入
利用构造函数实现对象的注入
在配置文件中
- 其实还是比较麻烦,因为你要写很多的东西,例如构造函数 get/set方法