Spring 学习:
---Day01
定义:
负责管理项目中的所有对象
看做项目中的对象管家
总结:Spring框架性质是属于容器性质的
一.不排斥其它框架,还可以帮助其它的框架管理对象
aop支持 loc思想 spring jdbc aop事务 junit测试支持
二.Spring最基础的4个包
beans,context,core,expression
最基层除了导入这4个还需要导入日志包
三.关于Spring插入文件的导入约束方式
a.perferences中的XML Catalog,添加Spring框架中的xsd文件
b.Key type选择scheme location 同时将xsd文件的后缀版版本移动到key后
c.进入到xml文件,Design模式中的<beans></beans>,右键进入Add DTD Information
添加xsi,进入到specify new namespace中select XML catolog entry添加xsd文件
Namespace Name中删去xsd文件名字的后缀版本部分
总结Spring导入步骤:
1.导包
2.创建一个对象
3.书写配置注册对象到容器
4.测试
四.Spring项目的概念:
思想:
1.IOC:Inverse of control 反转控制
详细:
将我们创建对象的方式反转了
以前对象的创建是由我们开发人员自己维护,包括依赖关系也是自己注入
但是Spring框架
对象的的创建以及依赖的关系可以由spring完成创建及注入
反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序来创建(spring)
2.DI: Dependency Injection 依赖注入
实现IOC思想需要DI作为支持,需要IOC的环境
注入方式:
set方法注入
构造方法注入
属性直接字段注入
注入类型:(spring支持 )
值类型注入 :8大基本数据类型
引用类型注入 :将依赖类型注入
applicationContext & BeanFactory区别:
BeanFactory(Spring最原始的接口) 实现类的功能较为单一
特点:每次获得对象时才会创建对象
而applicationContext是每次容器启动时直接把容器中对象全部创建好了,然后直接拿( getBean() )
同时提供更多其它的功能
web开发中使用applicationContext,资源比较匮乏的时候就用到BeanFoctory
applicationContext的实现类:
1.从类的路径下加载配置文件 ClassPathXmlApplicationContext("xxx.xml")
2.从硬盘绝对路径下加载配置文件:FileSystemXmlApplicationContext("d:/xxx/yyy/xxx");
五.Spring配置详解
三种创建Bean方式
<!-- 创建方式1:此方法为空参的构造方式 -->
<!-- 创建方式2:静态工厂创建 -->
<!-- 创建方式3:实例工厂 -->
scope属性:
singleton(默认值):单例对象,被标识为单例的对象在spring容器中只会存在一个实例
prototype:多例原型,标识为多例的对象,每次再获得才会创建,每次的创建都是新的对象
request:web环境下,对象与request声明周期一致
session:web环境下,对象与session声明周期一致
六.Spring的属性注入
set方法注入
构造函数注入:constructor-arg注入
index:限定参数的顺序 type:限定构造函数的参数类型
p名称空间注入
spel注入
<!-- 构造方法注入值 -->
注意:必须要设置空参构造方法作为默认的构造方法,否则会报错
<bean name="regUser2" class="com.yc.bean.RegUser">
<constructor-arg name="username" value="tom" index="0" type="java.lang.Integer"></constructor-arg>
<constructor-arg name="car" ref="car" index="1"></constructor-arg>
</bean>
七.管理容器在项目中的生命周期
要求不能每次都创建一个applicationContext 容器
使用监听器
需要配置监听,导入spring-web.jar
在web配置文件web.xml中配置监听
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
获得spring容器=>从Application域获得即可
1 获得servletContext对象
ServletContext sc = ServletActionContext.getServletContext();
2.从Sc中获得ac容器
WebApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(sc);
--Day02
一.Spring注解代替配置文件
1.Catalog导入新的约束(context文件约束)
导入时前缀不能继续为空
2.@Component
@Service //service层
@Controler //web层
@Repository //dao层
4种注解方式没有区别,只是用来区别,体现分层
@Value("")来赋值要么放在属性上 要么放在set方法上
但是放在属性上会破坏封装性(技术角度而言)
对对象进行注解
a.@Autowired //自动装配 但是对象多的时候无法选择具体注入哪一个对象
引入辅助注解
@Quslifier("对象名")
b.@Resource(name="xxxx") //指定对象直接注入
二.Spring的整合测试Junit
注解
@RunWith(SpringJunit4ClassRunner.class) 帮助创建容器
@ContextConfiguration("classpath:applicationContext.xml") //指定创建容器时使用哪个配置的文件
三.Spring中的aop,提供支持aop的开发
横向重复,纵向抽取<面向切面编程>
动态代理:
Proxy.newProxyInstance(
classLoader,Interface[] arr,InvocationHandeler handler);
Spring中aop概念:Spring可以为容器中管理的对象生成动态代理的对象
Spring帮助生成代理对象
Spring中事项aop原理:动态代理,cglib代理
(优先使用)动态代理:必须要有接口才可以产生被代理对象,如果没有接口将无法使用动态代理技术
cglib代理:对目标对象进行继承代理(如果该对象被final修饰,则无法使用)
四.Sping中的aop的演示
1.spring-aop & spring-aspects
& sprinngsources.org.aopallance
& springsource.org.aspectj.weaver 包导入
2.目标对象
3.准备通知<对目标对象增强>
4.配置进行织入,将通知织入目标对象中
---Day03
一.Spring整合JDBC
Spring中提供了一个可以操作数据库的对象,对象封装了jdbc技术
JDBCTemplate (JDBC模板对象):与DBUtils中的QueryRunner极其相似
Jar包的导入:6个基础包
Spring-test
Spring-aop
Junit4类库
c3p0连接池
JDBC驱动
Spring-jdbc
Spring-tx
二.Spring读取DB.properties
<context:property-placeholder location="classpath:....">
三.Spring中的事务管理
Spring封装了事务管理的代码<提供一个接口 PlatformTransactionManager接口 --> TransactionTemplate 事务模块的对象>
事务的操作:
打开事务
提交事务
回滚事务
Spring管理的几个事务的属性:
1.事务的隔离级别
读未提交
读已提交
可重复读
串行化
2.事务是否只读
true<只读>/false<可操作>
3.事务的传播行为
4.Spring管理事务的方式
编码式<了解>
将核心事务管理器配置到Spring容器
*xml配置(aop)
*注解配置(aop)
Spring准备的aop事务通知:
1.导入使用aop需要的jar包
2.导入新的约束
Spring-tx.xsd约束