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. JSP实现大文件上传和下载

    javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...

  2. luogu P1037 产生数 x

    P1037 产生数 题目描述 给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15). 规则: 一位数可变换成另一个一位数: 规则的右部不能为零. 例如:n=234.有规则( ...

  3. MongoDB可视化工具的安装

    MongoDBCompass MongoDB Compass是一款优秀可靠的mongodb可视化数据库管理软件.可以更加方便地与mongodb数据库进行交互,支持对数据库进行查询.分析或者查看数据库的 ...

  4. WPF Microsoft.Practices.Unity 注入大法简单示例

    最近新入职了公司,做WPF方向的项目,进来后看到这边大量运用了依赖注入来解耦,采用的是Microsoft.Practices.Unity. WPF的话,目前主要有两个技术来实现IOC,unity和ME ...

  5. Node 资源

    Node.js 首页 最新的 Node.js 核心文档 Node.js 博客 Node.js 职位公告板 Node.js 包管理器(npm)的首页

  6. sql server 高版本数据还原到低版本sql server的注意事项

    生成的sql脚本不能大于100m,否则会报错(System.OutOfMemory) 所以要将较大的sql脚本文件进行分割

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

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

  8. C++中让人忽视的左值和右值

    前言 为了了解C++11的新特性右值引用,不得不重新认识一下左右值.学习之初,最快的理解,莫过于望文生义了,右值那就是赋值号右边的值,左值就是赋值号左边的值.在中学的数学的学习中,我们理解的是,左值等 ...

  9. centos7安装kafka

    1.官网或 wget 下载 kafka_2.12-2.2.0.tgz 二进制代码包 cd /home/tar wget http://mirror.bit.edu.cn/apache/kafka/2. ...

  10. Maven的一些常用命令

    将本项目的源码部署到本地仓库 mvn clean source:jar install 将本地jar包部署到本地仓库,首先将jar包放在当前目录下,然后执行,这样做比直接把jar包copy到本地仓库更 ...