Spring笔记总结
javaweb
最重要的概念:
1.控制反转
2.AOP
学习框架的目的:为了解耦而奋斗
为解耦生,为解耦死,为解耦奋斗终生
1.控制正转
案例:工厂类的实现;
2.Spring
通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造
成的过度程序耦合
注意:
FoodFactory-->BeanFactory IOC容器,放Bean tomcat容器
依赖关系:A-->new B(); A extends C; C implements D
耦合:类与类之间、层与层之间、模块与模块之间、系统与系统之间的关系
要求:低耦合、高内聚
Spring IOC,放的是什么呢?Beans:很多很多的Bean,注意注意注意,Bean实体类,这个时候用的到很多类,不仅仅是之前的常规实体类,所有的可以new的类对象,都可以归纳为Bean。UserDao userDao=new UserDaoImpl(); 这个时候,userDao可以不可以作为Spring的一个Bean呢?
控制反转:控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做**依赖注入(Dependency Injection,简称DI**),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
控制反转=依赖注入+依赖查找
简化一下:由依赖对象的主动创建,改变成外部类或类库提供给它的方式。面试不会术语,就举例。
1.吃东西;原来自己动手丰衣足食,问题不好吃,麻烦,不全,--》食堂工厂提供给我们--》美团(更牛X)
2.找对象:发展,自己找,小学同学、初中、高中、大学;很困难;--》N个媒婆--》婚恋平台--》提供很多对象
领养孩子--》领养项目
自己做--》项目流程 开发 过程 代码量 bug修复 版本升级 人员沟通 项目成本
300万:50万销售-100万;项目周期:100天;干系人:10个;人日:300元/人 --》月除去 周六日 24天;7万二
10万;3个月:30万;房租|水电+工商:10万;投标:等10万;项目升级 、维护,需求变更等等。
我们的
项目:10天;数据库?如何计算?
3.Spring操作
3.1 建立一个maven的项目;
3.2 导入spring、lombok的依赖;
3.3 建立spring的xml文件,因为spring容器要读取这个配置文件;
3.4 建立相关的类;
3.5 获取bean的三种方式; 干活
3.6 bean的singleton和prototype 干活测试;
单例:单个实例;
多例:多个实例;
3.7 依赖注入
3.7.1 构造注入的使用;
优点:直接赋值,参数较少的时候,使用方便;
缺点:参数很多,不太好;参数的顺序不固定、个数不固定,不够灵活;
3.7.2 set注入的使用;
日期,已经属性(问题)
请问:属性注入的时候,不是和类的属性字段名一致,实际是和setXyz()方法后的方法名一致(注意需要把X换成x),方法实际是xyz。
3.7.3 复杂类型的使用
前3:数组 array 、集合 list、集合 set
后两:Map Properties
3.7.4 SPEL
bean a里面 #{引用bean b的id.属性}
3.7.5 引入外部的配置文件
a.外部的配置文件,放在resources下;
b.需要修改spring.xml 前面的命名空间文件;
c.需要使用<context:property-placeholder location="外部文件的位置"/>
d.定义通用dao类
e.dao类的bean注册,在属性使用${外部文件的key},通过外部文件的key来获取相应的信息,注意,第一次尽量出错,username 哪个错(获取你的计算机用户名)
4.注解(*重点)
步骤:
4.1 修改配置文件,加上下文等命名空间,加一个注解包扫描compoent-scan
4.2 实体的定义和接口的定义和之前一样;
4.3 常用注解:
@Component(value="值"): 把一个类标识为spring的一个bean,默认可以不写value,是类的名首字母小写;
@value(值):类的属性直接赋值;
@Autowired:byType按照类型的注入,可能会出现的问题是一个类型(接口),会出现多个对应的实现类;加@Qualifier("id名")即可
@Resource(name="id名"):byName,按照名字进行注入;
补充:springTest的使用,CV即可。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classpath:spring_ano_bean.xml)
4.作业
1.请考虑一下三国中是否有高耦合失败的案例战役,有请列举。
2.请列举你项目中的高耦合的具体业务代码,有的话如何优化?
3.请自己用语言来描述一下控制反转的概念;生活案例也请描述一二;
4.请自己用语言来解释依赖注入的概念;
5.Spring中是如何来实现控制反转和依赖注入的。
6.趣味案例实现:
三国人物:关羽开赤兔马拿大刀($)去PK的业务模拟实现。
7.升级
加了一个接口;
三国人物:
张飞 开乌骓马 娜 丈八蛇矛 去PK 业务模拟,将这两个放在一起???
8.第二次课作业;
针对controller 、service、dao(自选)、测试类,来锻炼一下,使用注解自动注入的使用。
9.模拟实现,不用连接数据库
<img src="asseits/image-20220222144122075.png" alt="image-20220222144122075" style="zoom: 50%;" />