Spring笔记

基础

Spring关于IOC操作的两种方式:

基于XML文件的配置方式

基于注解的配置方式

SpringIOC实战步骤:

  1. 首先创建一个项目

  2. 其次导入Spring核心的Jar包(beans / context / core / expression)及Log的Jar包(commons-logging / junit / hamcrest-core )

  3. 创建Spring的xml配置文件,名称任意,通常放在src目录下。

  4. 3步骤创建的xml配置文件,在spring的文件夹下的docs下的spring-framework-reference下的html下最后一个文件,打开该网页,寻找对应的约束,复制约束即可。

  5. 编写xml配置文件,导入需要实例化的class

  6. 使用ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); 然后使用context的getBean方法获取对象

  7. 完成Spring的IOC操作

Error解析:

  1. 当交由Spring管理的类没有默认的无参构造方法时,会出现如下异常。org.springframework.beans.factory.BeanCreationException

Bean实例化的三种方式

  1. 无参构造方式(重点)

  2. 静态工厂方式创建

  3. 实例工厂方式创建

Bean标签常用属性

  1. id

  2. class

  3. name

  4. scope

scope属性:

  1. singleton 默认值,单例的

  2. prototype 多例的

  3. request Web项目中,将该对象存入到request域中

  4. session Web项目中,将该对象存入到session域中

  5. globalSession Web项目中,应用在Porlet环境,如果没有Porlet环境,那么该值等同于session

属性注入

属性注入即Spring的IOC容器在创建对象时,向对象中的属性设置值。

P名称空间注入方式

复杂数据类型注入

Spring的Bean管理(注解)

准备工作:

  1. 导入Spring核心包

  2. 导入Spring的AOP包

  3. 导入其他Spring相关的依赖包

  4. 引入新的约束到xml配置文件中

  5. 设置开启注解的扫描

在类上使用注解即可完成

注解创建对象

创建对象注解

1.@Component

2.@Controller Web

3.@Service 业务层

4.@Repository 持久层

注解功能一致,后续可能会有增强。

单实例或多实例: 类上增加@Scope(value=””)即可

注解注入属性

注解注入属性有两种方式。

  1. @Autowired 自动注入,Spring自动寻找对应类名的类进行注入

  2. @Resource(name = "user") 手动注入 Spring根据name的值进行注入

AOC详解

AOP概念

  1. aop:面向切面编程:扩展功能以不修改源代码实现

  2. aop采用横向抽取机制,取代了传统的纵向继承体系重复性代码

AOP术语详解

Joinpoint(连接点):类中可被增强的方法,这些方法称为连接点

Pointcut(切入点):在类中实际被增强的方法称为切入点

Aspect(切面):将增强应用到具体方法上,该过程称为切面。

Advice(通知/增强):增强的逻辑,称为增强,例如扩展日志功能,该功能称为增强。

增强有以下几种类型:前置通知 / 后置通知 / 异常通知 / 最终通知 / 环绕通知

引介:引介是一种特殊的通知,在不修改类代码的前提下,可以在运行期间动态的为类增加一些方法货属性。

Target(目标对象):代理的目标对象(要增强的类)

Proxy(代理):一个类被AOP织入增强后,就产生了一个结果代理类。

Spring的AOP操作

  1. aspectj不是spring的一部分,和spring一起使用进行aop操作。

  2. spring2以后新增对aspectj支持

使用aspectj实现aop有两种方式

  1. xml方式配置

  2. 注解方式配置

Aop操作准备

导入以下几个jar包即可。

在spring核心配置文件中导入aop操作的约束

表达式配置切入点

Aspectj的AOP操作

前置后置环绕增强操作

Log4j WARN解决

在src目录下引入log4j.properties文件即可

Log4j.properties

#日志框架
#最早是System.out.print
#org.apache.log4j.Logger
#org.apache.commons.logging.Log
#java.util.logging.Logger
#org.slf4j.Logger 面向接口编程,选择实现(选择都使用这个)
#日志等级
#TRACE:详细等级,堆栈信息
#debug:类似于System.out.print
#info:类似于Hibernate的show_sql
#warn:不影响运行, 只是提示
#error:出现异常
#全局日志等级配置,输出位置
log4j.rootLogger=error, stdout,logfile
#stdout控制器
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#输出格式
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c]:%L - %m%n
#文件路径输出
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
#默认输出到tomcat的根路径或者运行测试工程的根路径
log4j.appender.logfile.File=pss.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
#局部日志等级:就近原则
#log4j.logger.固定,后面添加想那个包使用不一样的日志等级
#log4j.logger.cn.itsource.pss=debug

Spring整合web项目示例

  1. 导入其他jar包

  2. 导入spring-web-xxx.jar包

  3. 在web.xml中配置服务器启动时载入spring配置文件

Spring使用注解方式进行aop操作

  1. 导入相关的springJAR包

  2. 导入aop的xml头

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
  1. 使用注解

  2. 配置增强方法的注解

  3. 完成增强

配置c3p0连接池操作

并导入c3p0相关jar包

Spring的事务管理

  1. 什么是事务:事务是对数据库进行的一组操作,该组操作要么成功,要么失败。

  2. 事务的特性:原子性,一致性,隔离性,持久性

  3. 不考虑隔离性产生读问题:脏读,不可重复读,虚读,幻读

  4. 解决读问题:设置隔离级别

  5. 隔离性:多个事务之间不会产生影响

Spring事务管理api

Spring事务管理的两种方式:

  1. 编程式事务管理

  2. 声明式事务管理: xml配置实现,注解实现

Spring针对不同的dao层框架,提供了接口不同的实现类

声明式事务管理-xml配置实现

  1. 首先配置事务管理器,并注入操作的数据源

  2. 配置事务增强并配置事务增强的匹配方法

  3. 配置事务的具体切面,即aop切面操作

声明式事务管理-注解实现

  1. 配置事务管理器

  2. 配置事务注解

  3. 在要使用事务的方法所在类上添加注解

Spring整合web项目

整合struts2及hibernate:

  1. 导入struts2及hibernate核心jar包

  2. 导入spring-web.jar及spring-orm.jar

  3. 导入struts2-spring-plugin,jar

  4. Web.xml中配置spring启动监听器及struts2监听器

  5. 导入数据库驱动

  6. Log4j.jar相关导入

  7. 数据库连接池.jar导入

  8. 配置c3p0到spring.xml

  9. 配置spring管理hibernate事务

  10. Hibernate.cfg.xml基本信息导入到src下

  11. 导入log4j.properties文件