1. Spring入门

1. 1 Spring的体系结构

1.2 HelloWorld

1.2.1 Maven的使用

1)maven 的javase工程目录结构:



2)maven的settings.xml的配置:更改镜像,指定仓库地址,指定代理服务器

1.2.2 第一个程序

  1. 所需的基础JAR包:core、context、beans、commons-logging
  2. applicationContext.xml文件:sxd的配置和版本
  3. 定义java 类
  4. 将类在applicationContext.xml文件中配置成bean
  5. 编写测试类:实例化容器,从容器中获取对象,执行其方法

2. SpringIOC(DI)

2. 1 IOC(DI)概念思想

  • IOC:Iversion of Control控制反转,创建对象权力的转移
  • DI:Dependency Injection依赖注入,依赖对象的实例化和注入

2.2 Spring IOC容器的实例化方式

1)BeanFactory:

BeanFactory beanFac = new XmlBeanFactory(new FileSystemResource("D:\\eclipse-workspace\\ch1\\src\\applicationContext.xml"));

2)ApplicationContext

  1. ClassPathXmlApplicationContext方式:

    ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml");
  2. FileSystemXmlApplicationContext:方式:

    ApplicationContext appCon = new FileSystemXmlApplicationContext("D:\\eclipse-workspace\\ch1\\src\\applicationContext.xml");
  3. 通过Web服务器实例化ApplicationContext容器

2.3 依赖注入的方式

1)构造方法实例化bean

注意:接口不能实例化,不能配置成bean

2)构造方法

<bean id="userService" class="com.qst.service.UserServiceImpl">
<constructor-arg index="0" ref="userDao"></constructor-arg>
</bean>

3)setter方法注入

<bean id="userService" class="com.qst.service.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>

3. Spring Bean

3.1 Bean的配置

id class scope

3.2 Bean的实例化

  1. 通过构造函数
  2. 静态工厂实例化:工厂方法需要定义为static
  3. 实例工厂实例化:

3.3 Bean的作用域scope

默认:singleton 其他:prototype(通常用于控制器)、request\session\application

3.4 Bean的生命周期

singleton作用域的bean是被容器管理的,在容器启动时即被初始化,在容器关闭时回收

Prototype|request\session\application等作用域的bean的生命周期不被容器管理

3.5 Bean的装配

1)基于XML配置的装配

优势:关系清晰,全被在配置文件中展现

缺陷:编写复杂

复杂类型的注入:set\list\map

2)基于注解的装配

(1)类的修饰

  • @Component:适用于任何类
  • @Repository适用于DAO
  • @Service适用于service
  • @Controller适用于controller

(2)类之间的依赖(修饰属性,完成注入)

  • @Autowired:按类型注入,若想附加按名称找:@Autowired@Qualifier("userService2Impl")
  • @Resource:先按名称注入,名称找不到时再按类型

4. Spring AOP

4.1 AOP思想(Aspect orenti Programming)

AOP采取横向抽取机制,即将分散在各个方法中的重复代码提取出来,然后在程序编译或运行阶段,再将这些抽取出来的代码应用到需要执行的地方。这种横向抽取机制,采用传统的OOP是无法办到的,因为OOP实现的是父子关系的纵向重用。但是AOP不是OOP的替代品,而是OOP的补充,它们相辅相成。

AOP中的专业术语:连接点、切面、切入点、通知、目标对象、代理对象、织入

4.2 AOP的实现

1)实现时机:

  • 编译器织入,需要有特殊的Java编译器;
  • 类装载期织入,需要有特殊的类装载器;
  • 动态代理织入,在运行期为目标类添加通知生成子类的方式。
  • Spring AOP框架默认采用动态代理织入,而AspectJ(基于Java语言的AOP框架)采用编译器织入和类装载期织入。

2)实现方式:

  1. JDK动态代理
  2. CGLIB动态代理
  3. SpringProxyFactoryBean(内部机制JDK动态代理)
  4. AspectJ

    ①基于xml配置

    ②基于注解配置

    <aop:aspectj-autoproxy proxy-target-class="true"/>

    @Aspect、@Before等五類通知

3)新增所需jar包

spring-aop、spring-aspects、spring-expression、aspectjweaver、aopalliance

4)通知的類型

五種,執行順序

5. Spring 数据库操作

5.1 Sping JDBC如何配置

1)新增所需jar包:spring-jdbc、mysql-connector

2)配置数据源和JDBCTemplate

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/spring?characterEncoding=utf8"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>

5.2 Spring JDBCTemlate的用法

1)在DAO类种注入JDBCTemplate对象

2)调用JDBCTemplate对象的update()执行增删改、调用query()方法执行查询

6. Spring事务管理

6.1 Spring 編程式事務

将事务实现代码硬编码到业务类中,污染核心业务

//设置事务属性

TransactionDefinition defination=new DefaultTransactionDefinition();

//开启事务

TransactionStatus ts = txManager.getTransaction(defination);

//事务提交

txManager.commit(ts);

//事务回滚

txManager.rollback(ts);

6.2 Spring 声明事务

将事务处理和业务处理进行分离,在业务代码运行期进行插入,依靠AOP机制实现

实现方式:

1)基于xml

<!-- 事务通知 -->
<tx:advice id="myAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" isolation="DEFAULT" read-only="false" rollback-for="RuntimeException"/>
</tx:attributes>
</tx:advice> <aop:config>
<aop:pointcut expression="execution(* com.qst.dao.*.*(..))" id="mytxpointcut"/>
<aop:advisor advice-ref="myAdvice" pointcut-ref="mytxpointcut"/>
</aop:config>

2)事务的传播属性(行为)

propagation="REQUIRED"/NOT_SUPPORTED/REQUIRES_NEW/SUPPORTS

3)基于注解

(1)在需要使用事务的service类中加入以下注解:

@Transactional(propagation=Propagation.REQUIRED)



(2)在applicationContext.xml中加入:

<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="txManager"/>

Spring基础学习笔记的更多相关文章

  1. Spring基础学习笔记-Bean的基础知识

    一. Bean的定义,初始化,使用和销毁 二.ref指定依赖的三种模式 三.Bean的五种自动装配模式(autowire) 四.Bean依赖检查的4种模式:配合atuowire使用,dependenc ...

  2. 【转】Spring.NET学习笔记——目录

    目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...

  3. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

  4. SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能

    在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...

  5. Spring.NET学习笔记——目录(原)

    目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...

  6. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  7. 【C#编程基础学习笔记】4---Convert类型转换

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...

  8. 【C#编程基础学习笔记】6---变量的命名

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...

  9. 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)

    技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...

随机推荐

  1. jquery-时间轴滑动

    效果预览图: html: <div class="tim"> <div class="timdiv"> <div class=&q ...

  2. setData 机制

    解释:setData 函数,用于将数据,从逻辑层发送到视图层,当开发者调用 setData 后,数据的变化,会引起视图层的更新.参数说明 属性 类型 是否必填 描述 data Object 是 这次要 ...

  3. Mysql数据库常见试题

    引用自http://blog.csdn.net/laoniyouxi123/article/details/51161157 sql语句应该考虑哪些安全性? 答: (1)防止sql注入,对特殊字符进行 ...

  4. HDU 4300 Clairewd's message ( 拓展KMP )

    题意 : 给你一个包含26个小写字母的明文密文转换信息字符串str,第一个表示'a'对应的密文是str[0].'b'对应str[1]……以此类推.接下来一行给你一个另一个字符串,这个字符串由密文+明文 ...

  5. [UVA160]Factors and Factorials 题解

    前言 这道题目本身毫无技术含量珂言,但是输出格式珂以调一年 题解 这道题让我们求\(N!\)中每个质数的个数. 一种方法是直接模拟,枚举\(N!\)中的每个元素,然后暴力查看每个数含有有多少质数. 但 ...

  6. HDU - 6578 Blank DP + 滚动数组

    HDU - 6578 Blank 题意 给你\(\{0,1,2, 3\}\)四个数,分别填入长度为\(n\)的数列中,有\(m\)个限制条件,\(l_{i}, r_{i}, x_{i}\)表示在\([ ...

  7. [BZOJ2038]:[2009国家集训队]小Z的袜子(hose)(离线莫队)

    题目传送门 题目描述 作为一个生活散漫的人,小$Z$每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小$Z$把这 ...

  8. uniapp 之navigateTo:fail page 跳转路径不对

    开发uniapp,点击列表跳转详情报错 [system] navigateTo:fail page `/pages/tabBar/index/detail/detail?title=uni-app行业 ...

  9. 纯css实现Material Design中的水滴动画按钮

    前言 大家平时应该经常见到这种特效,很炫酷不是吗 这是谷歌Material Design中最常见的特效了,市面上也有很多现成的js库,用来模拟这一特效.但是往往要引入一大堆js和css,其实在已有的项 ...

  10. Java中使用Redis的几种数据类型总结

    1.String,最基本的类型 方法  set.get 2.hash redis 127.0.0.1:6379> HMSET user:1 username redis.net.cn passw ...