案例:
缺点:可重用性差,不便于维护,升级麻烦
三层架构拆分代码:
controller 层:和浏览器交互(请求,响应)
service: 业务逻辑处理
dao:数据访问(增删改查)
优点:复用性好,便于维护升级
分包开发:
让代码更加的便于维护
耦合:
描述的是代码与代码之间,程序与程序之间的关联关系
关联度越高,耦合度高
关联度低,交耦合度低
编程原则:
高内聚(软件中各个功能模块内部的功能联系),低耦合
注意:
耦合只能降低,不能完全消除
接口的好处:
1.可以协助三层架构程序降低耦合
2.制定规则:约定方法名称及返回值等
耦合的降低
1.使用接口
2.自己写工具类 BeanUtils(了解即可,代码比较繁琐)
service 不依赖dao层具体实现类
(Bean:豆
JavaBean:java中的可重用组件)
2.使用spring提供的工具实现
@Component spring底层会自动识别该注解(一般用在工具类等其他类的创建)
1.创建对象
2.放入容器(内部的集合)
@Repository 写在Dao 数据处理层
@Controller 写在controller/web层(RestController注解包含该注解)
@Service 写在service层
@Autowired spring底层会自动识别该注解
1.从容器中获取对象并给属性赋值
默认按照类型注入,如果找到一个直接使用
1.没找到就报错
2.如果按照类型找到多个,会继续按照名称找一次
@Primary 声明是哪个类主要的(出现冲突)
@Qualifier() 不能单独使用,配合@Autowired 指定名称
@Resource(name = "") 直接使用该注解 按照名称注入对象(jdk提供的)
@Autowired(spring提供的)可以写在set方法上,也可以写在构造函数上,也可以直接写在属性上
控制反转(IOC Inversion Of Control):创建对象的权利发生了反转(由程序员自己new,变成了spring帮我们创建),这个思想叫做控制反转
创建对象,将对象放进容器
依赖注入(DI Dependency inject):对象与对象之间的依赖关系靠spring自动注入维持
从容器取对象
共同作用:降低耦合
@RequestParam : 请求参数是 key=value 时使用 @DateTimeFormat : 请求参数是 日期时使用 @RequestBody 请求参数是 json 格式时使用 @PathVariable 请求参数通过路径传递参数时使用 @ResponseBody 响应数据自动转换成json 格式 @Component 标注在类上,创建对象,一般写在工具类上 @Controller 标注在类上,创建对象,一般写在 Controller 层 @Service 标注在类上,创建对象,一般写在 service 层 @Repository 标注在类上,创建对象,一般写在 dao 层 @Autowired 用于注入对象 @Qualifier 用于注入对象,配合@Autowired 使用 @Resource 用于注入对象 @Primary 用于注入对象时,如果有多个对象,指定生效的对象