震惊!原来Spring框架入门仅需这么几步
老营销号了🤪
Spring一学就忘是怎么回事呢?Spring相信大家都很熟悉,但是Spring一学就忘是怎么回事呢,下面就让小编带大家一起了解吧。
Spring一学就忘,其实就是Spring超级恶心🤧,大家可能会很惊讶Spring怎么会一学就忘呢?但事实就是这样,小编也感到非常惊讶。
这就是关于Spring一学就忘的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!
教学开始
1.Spring的概述
1.1介绍
Spring—SE/EE开发的一站式框架,百度百科,学习SSH和SSM必走之路。
一站式框架:有EE开发的每一层解决方案。
1.2下载
解压后的文件:
- docs :Spring的开发规范和API
- libs :Spring的开发的jar和源码
- schema :Spring的配置文件的约束
1.3引入Spring核心jar包
1.4原始Dao存在的问题
原始Dao虽然可以通过接口实现多态,但是需要修改时还是需要修改源码
而好的程序需满足OCP原则:在尽量不修改程序源码的基础上对程序进行扩展
1.5IOC和DI
IOC:控制反转,将对象的创建权反转给了Spring。
DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。
IOC实现需要DI,DI前提必须有IOC
2.Spring的配置
2.1头配置
在src下新建文件applicationContext.xml(名字任意,默认是这个)
这里把下文注解context约束,aop约束,事务tx约束都导入了
1 |
|
这里可以通过解压目录下spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html查看需要的配置,也可以通过Design界面下先在Preference下输入cato配置xsd文件然后右键
2.2标签的配置
id和name区别:id需要唯一却不能有特殊字符,name相反
Bean的作用范围的配置scope:
singleton :默认的,Spring会采用单例模式创建这个对象。
prototype :多例模式。(Struts2和Spring整合一定会用到)
request,session,globalsession:应用在web项目中,分别存到各自的域,其中globalsession必须在porlet环境下使用。
porlet案例:登陆百度,然后进入百度的子页面如贴吧地图等不需要登陆了
2.3Spring的工厂类
BeanFactory :老版本的工厂类
ApplicationContext :新版本的工厂类,有两个实现类:
- ClassPathXmlApplicationContext :加载类路径下的配置文件(相对于src)
- FileSystemXmlApplicationContext :加载文件系统下的配置文件(绝对路径)
2.4Spring的实例化方式和属性注入
实例化方式:无参构造,静态/实例工厂实例化
属性注入:
set方法注入——name属性名,value属性值,ref关联其他类
P名称空间注入——p:name p:属性名
SpEL属性注入——#{‘xxx’}字符串 #{car}其他类 #{car.name}其他类的属性
1 | <!-- 创建方式1:空参构造创建 --> |
2.5分模块开发
把applicationContext.xml拆分成各司其职的模块,然后通过
1 | <!-- 导入其他spring配置文件,文件位置:相对于src --> |
2.6Spring整合Junit
在测试类上面添加如下注解
1 | //帮我们创建容器 |
3.IOC的注解
3.1添加约束
注解约束是context(上文以添加)
3.2配置注解扫描
1 | <!-- 指定扫描com.heima.domain包下所有类(包括子孙包)的所有注解 --> |
3.3在相关类上添加注解
1 | //相当于<bean name="user" class="com.heima.domain.User"> |
3.4属性注入的注解
使用注解注入的方式,可以不用提供 set 方法
@Value() 注入普通类型
@Autowired 自动装配(默认按类型进行装配 ),如果有多个同类型的,必须要和@Autowired强制使用名称注入一起使用
@Resource(name=”xxx”) 作用相当于@Autowired+@Autowired
3.5XML和注解的整合开发
Bean 有 XML 配置.但是使用的属性使用注解注入
1 | <!-- 扫描是为了扫描类上的注解(class) --> |
4.AOP的开发
4.1AOP的概念
百度百科,AOP 最早由 AOP 联盟的组织提出的,制定了一套规范.Spring 将 AOP 思想引入到框架中,必须遵守 AOP 联盟的规范.
Spring现在使用的AOP开发方式是基于AspectJ
4.2AOP的底层实现
JDK 的动态代理 :针对实现了接口的类产生代理.
Cglib 的动态代理 :针对没有实现接口的类产生代理. 应用的是底层的字节码增强的技术 生成当前类
的子类对象
4.3AOP的相关术语
4.4Spring 使用 AspectJ 进行 AOP 的开发:XML 的方式
4.4.1导包
com.springsource.org.aopalliance-1.0.0.jar(AOP 联盟)
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar(AspectJ)
spring-aop-4.2.4.RELEASE.jar
spring-aspects-4.2.4.RELEASE.jar(Spring 整合AspectJ)
4.4.2约束
引入约束aop(前文已经导过,为了方便,后文配置又写了一下)
4.4.3目标对象
1 | package com.heima.service.impl; |
4.4.4通知对象
1 | package com.heima.springaop; |
4.4.5配置
1 |
|
5.AOP的注解
5.1打开注解配置
1 | <!-- 在配置文件中打开注解aop的开发 --> |
5.2注解的AOP的通知类型
@Before :前置通知
@AfterReturning :后置通知
@Around :环绕通知
@AfterThrowing :异常抛出通知
@After :最终通知
5.3AOP的注解切入点的配置
1 |
|
之后注解就可以简化为
@Before(value=”类名称.pointcut1”)
6.Spring的JDBC模板
Spring是EE开发的一站式的框架,有EE开发的每层的解决方案。Spring对持久层也提供了解决方案:ORM模块和JDBC的模板。
6.1导包
mysql-connector-java-5.1.7-bin.jar
spring-jdbc-4.2.4.RELEASE.jar
spring-tx-4.2.4.RELEASE.jar
6.2创建db.properties
1 | jdbc.driverClass=com.mysql.jdbc.Driver |
6.3配置
1 | <!-- 指定spring读取db.properties配置 --> |
6.4模板的CRUD操作
1 |
|
模板不提供类似于dbutils的各种rowmapper,需要自己写
7.Spring的事务管理
7.1API
latformTransactionManager:平台事务管理器
—— DataSourceTransactionManager:底层使用JDBC管理事务
TransactionDefinition :事务定义信息
TransactionStatus:事务的状态
7.2事务的传播行为propagation
- PROPAGATION_REQUIRED:默认值,如果A中有事务,使用A中的事务,如果A没有,创建一个新的事务,将操作包含进来
- PROPAGATION_REQUIRES_NEW:如果A中有事务,将A的事务挂起(暂停),创建新事务,只包含自身操作。如果A中没有事务,创建一个新事务,包含自身操作。
- PROPAGATION_NESTED:嵌套事务,如果A中有事务,按照A的事务执行,执行完成后,设置一个保存点,执行B中的操作,如果没有异常,执行通过,如果有异常,可以选择回滚到最初始位置,也可以回滚到保存点。
7.3搭建环境
Dao层
1 |
|
Service层
1 | private AccountDao ad; |
xml配置
1 | <!-- 指定spring读取db.properties配置 --> |
测试代码
1 |
|
7.4编程式事务(需要手写代码)
太过麻烦而且基本使用,略过
7.5声明式事务管理(通过配置实现)
1 | <!-- 事务核心管理器,封装了所有事务事件,依赖于连接池 --> |
7.6注解方式的声明式事务管理
1 | <!-- 开启使用注解管理aop事务 --> |
1 |
|
结语
没错吧,Spring入门真的只需要掌握这么亿点点,真的一点都不♂,我真的不会忘🙃
哎,你是不是觉得我很菜,是不是觉得我连白银都打不过。从现在开始,我将一次不死,并且超神给你看。
芜湖!起飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞飞!!!!!!!!!!