• 欢迎来到本博客,希望可以y一起学习与分享

spring笔记

Java benz 4年前 (2018-02-25) 154次浏览 0个评论 扫描二维码

目录

文章目录[隐藏]

Spring 入门

1. 导包




其中,日志包与可选包,从另外导入

2. 创建user对象类

3.创建配置文件

配置文件放哪、叫什么名字都随意,但是建议在src下建立名为applicationContext.xml作为spring的配置文件。

4.导入约束(操作复杂)


5.书写配置注册对象到容器

6.测试代码

IOC与ID的概念:


BeanFactory与applicationContext

BeanFactory(过时)

Spring原始接口,针对原始接口的实现类,功能较为单一。
BeanFactory接口实现类的容器。特点是每次在获得对象时才会创建对象

aplicationContext

每次容器启动的时候会创建容器中配置的所有对象。并提供更多功能。
从类路径下加载配置文件:ClassPathXmlApplicationContext(重点)
从硬盘绝对路径下加载配置文件:FileSystemXmlApplicationContext

结论:开发中,使用applicationContext。在资源匮乏的环境可以使用BeanFactory。

配置详解:

Bean元素:

三种对象创建方式:

1.空参构造(重点)
User类:

测试方法:

配置:

2.静态工厂(了解)
静态类:

测试类:

配置:

3.实例工厂(了解)
实例类:

测试类:

配置:

scope属性:

singleton(默认值):单例对象。被标识为单例的对象在spring容器中只会存在一个实例。
配置

prototype:多例原型。被标识为多例的对象,每次再获得才会创建,每次创建都是新的对象。整合Struts2时,ActionBean必须配置为多例。
配置

request(了解):web环境下。对象与request生命周期一致。
session(了解):web环境下。对象与session生命周期一致。

生命周期属性:

配置一个方法作为生命周期初始化方法。Spring会在对象创建之后立即调用。
Init-method
配置一个方法作为生命周期销毁方法。Spring容器在关闭并销毁所有容器中的对象之前调用。
Destory-method
User类:

配置

测试:

模块化配置:

属性注入

User类:

Car类:

Set方式(重点):

配置

测试:

构造函数方式(重点):
配置

测试

P名称空间(了解):
配置

测试:

SPEL表达式(了解)
配置:

测试:

复杂类型注入

创建类

配置:

测试:

使用注解代替XML配置

导入包(aop包):spring-aop-4.2.4.RELEASE.jar

1.为主配置文件引入新的命名空间(约束)(context约束)


2.开启使用注解代理配置文件

3.使用注解

4.测试代码

5.其他注解

安装STS插件


如果没有安装STS,自寻安装方法。

spring整合junit测试

1.导包

4基础包+2日记包+aop包+test包
test包:spring-test-4.2.4.RELEASE.jar

2.注解的使用

AOP思想介绍

AOP实现原理

AOP实现原理是由动态代理与CGLib代理共同完成,两种代理都使用,如果有接口,优先使用动态代理,没有就使用CGLib代理,目的是可以代理所有类。

动态代理

被代理对象必须实现接口,才能产生代理对象。如果没有接口,将不能使用动态代理技术。

CGLib代理

第三方代理技术,CGLib代理可以对任何类生成代理。代理的原理是对目标对象进行继承代理。如果目标对象被final修饰,那么该类无法被CGLib代理。(Hibernate也使用CGLib代理,也就为什么有一项规定,方法不能被final修饰)

AOP术语介绍

  • Joinpoint(连接点):目标对象中,所有可以增强的方法。
  • Pointcut(切入点):目标对象,已经增强的方法。
  • Advice(通知/增强):增强的代码。
  • Target(目标对象):被代理对象。
  • Weaving(织入):将通知应用到切入点的过程。
  • Proxy(代理):将通知织入到目标对象之后,形成代理对象。
  • Aspect(切面):是切入点和通知的结合。

AOP

1.导包

4基础包+2日志包+spring-aop-4.2.4.RELEASE.jar+spring-aspects-4.2.4.RELEASE.jar+com.springsource.org.aopalliance-1.0.0.jar+com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar路径:spring-framework-3.0.2.RELEASE-dependencies\org.aspectj\com.springsource.org.aspectj.weaver\1.6.8.RELEASE

2.准备目标对象

userservice接口:

目标对象:

3.准备通知

4.配置进行织入,将通知织入目标对象中

导入AOP约束


配置文件:

5.测试代码

spring的aop注解配置

1.配置applicationContext.xml

2.注解通知

3.测试类

spring整合jdbc-jdbc模板对象

JDBCTemplate(JDBC模板对象):Spring中提供了一个可以操作数据库的对象。对象封装了JDBC技术。与DBUtils中的QueryRunner非常相似。

1.导包

4基础包+2日志包+aop包+test包+C3P0连接池+JDBC驱动+spring-jdbc+spring-tx

2.准备数据库sshdemo,创建表jt_user

3.测试代码

jdbc模板api详解

创建接口:UserDao

使用JDBC模板实现增删改查

连接池&JDBC模板&Dao配置到spring容器


测试代码

jdbc扩展-JDBCDaoSupport

UserDaoImpl类

配置修改

读取db.properties配置

目的:将数据库连接信息抽取出来,单独为db.properties文件。

src下,创建db.properties

配置文件

Spring事务管理

Spring封装了事务管理代码

JDBC、Hibernate、MyBatis都有自己实现事务的方法,在不同平台,操作事务的代码各不相同。Spring提供了一个接口:PlatformTransactionManager接口
Spring通过这个接口,对各个平台的事务进行了封装,如:JDBCTransactionManager、HibernateTransactionManager等。
在Spring中使用事务管理,最为核心的对象就是TransactionManager对象。(要使用事务TransactionManager必须要配置)

Spring管理事务的属性介绍

事务隔离级别

  • 1:读未提交
  • 2:读已提交
  • 4:可重复读
  • 8:串行化

是否只读

  • true :只读(不能操作数据库,只能查,增、删、改会报错)
  • false:可操作数据库

事务传播行为


PROPAGATION_XXX:事务的传播行为

保证同一个事务中

  • PROPAGATION_REQUIRED 支持当前事务,如果不存在就新建一个(默认)
  • PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务
  • PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常

保证没有在同一个事务中

  • PROPAGATION_REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务
  • PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务
  • PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常
  • PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行

Spring事务入门

事务环境准备

以转账为例:
创建转账表sp_account

DAO层:
接口:AccountDao

实现接口:AccountDaoImpl

service层:
接口:AccountService

实现接口: AccountServiceImpl

配置:
dataSource注入AccountDao,AccountDao注入AccountService

测试代码:

spring事务使用方式一:Transaction模板(了解)

配置文件

service层使用事务

测试代码:不变

spring事务使用方式二:xml配置aop事务(重点)


导包:

  • aop包
  • aspect包
  • aop联盟包
  • weaving织入包

导入新的约束:tx

配置通知

其他不变。

spring事务使用方式二:注解配置aop事务(重点)

导包、引入新约束和XML配置AOP事务一样

开启注解管理事务

使用注解

三大框架整合理论

导包

Hibernate

路径:hibernate/lib/required 下的所有jar文件
路径:hibernate/lib/jap 下的hibernate-jpa-2.1-api-1.0.0.Final.jar文件(JAP java的持久化规范)
数据库驱动:mysql-connector-java-5.1.7-bin.jar

Struts

路径:struts-2.3.24/apps/struts2-blank.war后缀改为zip解压后WEB-INF/lib下的所有包
注意:struts中的javassist与Hibernate重复,删除版本低的就可以了。
Struts整合Spring插件包:struts-2.3.24/lib/struts2-spring-plugin-2.3.24.jar
注意:这个包一旦导入,那么struts2在启动时就会寻找spring容器。找不到将会抛出异常。

Spring

基本:4+2
core|beans|context|expression|loggin|log4j
整合web:web包
spring-web
整合AOP:4个
spring-aop|spring-aspect|aop联盟|aop-weaving
整合jdbc&事务&连接池&ORM:4个
spring-jdbc|spring-tx|C3P0|spring-orm
junit4测试:test包
spring-test
标签库:standard.jar,jstl-1.2.jar

单独整合(配置)spring容器

创建spring配置文件,并导入约束(4个)

导入约束:beans|context|aop|tx
创建applicationContext.xml配置文件

配置web.xml:让spring随项目启动。

注意:类全名获取:
Ctrl+shift+T输入ContextloaderListener,选择输入的这个类,导入源码spring-web-4.2.4.RELEASE-sources.jar,找到ContextLoaderListener这个类,复制这个类的类全名。

注意:名称获取:
在源码中类ContextLoaderListener extends ContextLoader中,Ctrl点击ContextLoader,查看源码,第二个常量CONFIG_LOCATION_PARAM = “contextConfigLocation”;,其中的值就是所需填写的名称。

测试

新建一个action类:UserAction

到applicationContext.xml配置一下

运行一下项目,控制台没报错则为成功。

单独整合(配置)Struts2

配置Struts2主文件

在src下创建struts.xml配置文件,并导入约束:在struts2-core包下有一个struts-2.3.dtd的约束文件,打开它,把里面的约束复制过来就可以了。

在web.xml中注册核心过滤器

注意:的获取:
Ctrl+shift+T输入StrutsP就会有提示

测试

到struts.xml中配置一下UserAction

运行一下项目,不报错就是成功。

整合struts2与spring

导包(已导):struts2-spring-plugin-2.3.24.jar

配置常量:

整合方案一

struts2自己创建action,spring负责组装依赖属性。
不推荐理由:最好由spring完全管理action的生命周期。spring中功能才能应用到Action上。

配置spring依赖属性

整合方案二

spring负责创建action以及组装

到spring配置action

单独配置Hibernate

测试

整合hibernate与spring

整合原理:将sessionFactory对象交给spring容器管理。
到spring配置Hibernate

整合方案一(不推荐)

整合方案二

spring整合C3P0连接池

1.配置db.properties

2.引入连接池到spring中

3.将连接池注入到sessionFactory

HibernateTemplate模板操作数据库

创建userDao

spring 配置注入sessionFactory

测试

整合AOP事务

配置核心事务管理器

配置方式一:xml配置AOP事务

配置方式二:注解配置AOP事务

开启注解配置事务

service类中使用注解

扩大session作用范围

为了避免使用懒加载时出现no-session问题,需要扩大session的作用范围

配置filter


文章 spring笔记 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!