Spring学习
企业级系统
-
大规模:用户数量多,数据规模大,功能众多 -
性能和安全要求高 -
业务复杂 -
灵活应变
轻量级框架
高内聚(模块内部尽可能关联),低耦合(模块与模块之间的关系尽可能的低)
高内聚:描述了模块内部的一系列功能的相关程度,对于功能之间相关度不高或者根本没有相关性的功能包含在模块中的做法是不可取的。
低耦合:描述了模块直接的依赖、感知程度,耦合的衡量标准是从低到高,一般来说耦合度越低越好。
独立性高
生命周期
实例化—>设置属性—>使用javabean
单例模式:创建始终是一个对象
约束
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
</beans>
依赖注入
Setter注入
对应的javaBean里面的属性必须要封装必须要有无参的构造函数
构造器注入
必须要有参数的构造器
使用constructor标签进行注入
所有注入类型分为2种类型:普通参数
P命令空间注入
导入P命令空间约束
他是在bean标签属性 p:属性名=“” p:属性名-ref=“引用的id”
不同类型注入
<!CDATA[转义字符]>
内部bean
List Array Set 使用
<list><value></value></list>
map类型
<map><entry key="" value=""></entry></map>
prorerties类型
<props><prop key="">值</prop></props>
注解方式
注入@AutoWired @Resources
生成javabean @Component @controller @Service @Repository
低侵入式,面向切面编程
把纵向的业务逻辑变为横向的编程思想
连接点:是已经存在的
切入点:是我即将要操作的
织入:将东西放入,增强的过程
通知(advise):增强,放进去的方式 前置增强,环绕增强,后置增强
切面( aspect )︰类是对物体特征的抽象,切面就是对横切关注点的抽象
Mybatis总结
? 框架
业务分层
1.web层,视图层:
2.service层,服务层:
3.dao层,持久化层
4.实体类层:数据的承载
5.工具类层:日期格式化,MD5加密,生成二维码
Mybatis框架
概念:dao层的半自动框架:半自动数据库和数据库表需要自行创建,全自动框架只需创建数据库即可
Mybatis实际上依旧是以sql语句为实现主体
hibernate:是以自带模板为主 HQL 原生的sql
配置文件:mybatis主配置文件
约束是configuration…dtd
根标签是configuration
environments
- environment
- transactionManager
- dataSource
mappers
- class:配置接口的类路径
- resource:配置sqlmapper文件路径
typealises:别名
setting:配置
sql mapper(注解方式)
约束是mapper开头
根标签是mapper:namespace:绑定接口或实体类
CRUD实现
- resulType:返回值类型(大部分用于查询,单条数据还是多条数据)
- resultMap:绑定sql Mapper当中定义的resultMap
- parameterType:参数类型
ResultMap:建立持久化类与数据库表之间的关联关系 —ORM
子标签
id result association collection
$和#区别
- ${}:等同于字符串拼接
- #{}等同于preparedstatement当中的占位符,防止依赖注入
#{变量名:数据库类型}等价于#{变量名,jdbcType=数据库型
动态sql:以标签的形式替代sql语句中部分内容
两个重要对象
sqlsessionFactory(二级缓存,默认关闭)
sqlsession:(一级缓存,默认开启)
Spring总结
service层框架
spring框架的优势
- 轻量级
- 低侵入式
- 解耦,降低耦合性,提高程序健壮性
- 安全,功能强大
底层使用的技术
两大核心技术
ioc
ioc(DI):控制反转(刁颖这的角度)/依赖注入(spring容器)
- 谁控制了谁(容器控制了对象),
- 谁反转了谁(从调度者到了spring容器)
- 如何进行反转(spring容器进行反转)
- 反转的对象是谁(Javabean)
两种生成Javabean的方式
xml:
- id—> 等同于变量名
- class–>由哪个类创建的对象
- scope —>设置是单例模式还是圆形模式(protoType),默认单例模式(singleton)
- lazy-init —>懒加载
1.属性注入:
- 普通参数使用 value属性
- 对象使用 ref属性 setter注入
- list set arraylist使用list标签
- map使用
- properties 使用
- 特殊字符:<![CDATA[转义字符]]>
2.构造器注入
3.命名空间注入:引入p命名空间约束
- property标签添加p:属性名/p:属性名-ref给属性赋值
注解
1.生成Javabean的注解
- @Component(通用组件) @controller @Service @Repository(dao层组件
2.注入属性的注解
@Autowired @Resource @Value
3.开启注解扫描
context:component-scan base-package=“包路径”
Aop
Aop:把纵向的编程思想变为横向的编程思想,在不侵入源代码的前提下,进行增加其业务逻辑的操作,低侵入式
面向切面编程实现的方式
- 静态代理AspectJ
- 动态代理Spring Aop
spring实现Aop技术方式
xml
导入schema约束
aop config配置
- 配置切入点 aop:pointcut/
- 配置增强aop:adviser/ 方式
- 连接点 joinpoint
- 切面 aspect 增强类
- 织入weave
- 目标 target
注解
导入jar包
- aopalliance
- aspectjweaver
- cglib-nodep
定义切面类加上@Aspect
定义切入点 @Pointcut (execution(* *(…)))
定义增强方法 @Before @After @Around @AfetrReturning 里面的参数可以是execurtion表达式,可以直接写入切入点
开启动态代理注解aop:aspectj-autoproxy
切入点表达式写法
- exection()
- exection(访问修饰符 返回值类型 包名 +类名+方法(参数)
- 除参数以外所有的都可以使用* 代替,参数使用英文的两个点代替(…)—通配符
项目开发思想:高内聚,低耦合
|