Spring基础学习笔记
1. Spring入门
1. 1 Spring的体系结构
1.2 HelloWorld
1.2.1 Maven的使用
1)maven 的javase工程目录结构:
2)maven的settings.xml的配置:更改镜像,指定仓库地址,指定代理服务器
1.2.2 第一个程序
- 所需的基础JAR包:core、context、beans、commons-logging
- applicationContext.xml文件:sxd的配置和版本
- 定义java 类
- 将类在applicationContext.xml文件中配置成bean
- 编写测试类:实例化容器,从容器中获取对象,执行其方法
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
ClassPathXmlApplicationContext
方式:
ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml");
FileSystemXmlApplicationContext:
方式:
ApplicationContext appCon = new FileSystemXmlApplicationContext("D:\\eclipse-workspace\\ch1\\src\\applicationContext.xml");
- 通过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的实例化
- 通过构造函数
- 静态工厂实例化:工厂方法需要定义为static
- 实例工厂实例化:
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)实现方式:
JDK
动态代理CGLIB
动态代理Spring
的ProxyFactoryBean
(内部机制JDK动态代理)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基础学习笔记的更多相关文章
- Spring基础学习笔记-Bean的基础知识
一. Bean的定义,初始化,使用和销毁 二.ref指定依赖的三种模式 三.Bean的五种自动装配模式(autowire) 四.Bean依赖检查的4种模式:配合atuowire使用,dependenc ...
- 【转】Spring.NET学习笔记——目录
目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...
- Spring MVC 学习笔记一 HelloWorld
Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...
- SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能
在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...
- Spring.NET学习笔记——目录(原)
目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- 【C#编程基础学习笔记】4---Convert类型转换
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...
- 【C#编程基础学习笔记】6---变量的命名
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...
- 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)
技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...
随机推荐
- java如何实现多继承
在java中,原则上是不允许多继承的,也就是类与类之间只可以单继承.那么,有没有办法,可以在不使用接口的情况下实现多继承呢? 答案是可以.使用内部类就可以多继承,严格来说,还不是实现多继承,但是这种 ...
- Linux内核设计与实现 总结笔记(第十五章)进程地址空间
一.地址空间 进程地址空间由进程可寻址的虚拟内存组成,内核允许进程使用这种虚拟内存中的地址. 每个进程都有一个32位或64位的平坦地址空间,空间的具体大小取决于体系结构.“平坦”指的是地址空间范围是一 ...
- Miniprofiler在目中使用报 mini-profiler-resources/includes.js 404错误
原因,没有配置webconfig <system.webServer> <modules> <remove name="FormsAuthentication& ...
- 深入理解Spring(一):初识Spring
深入理解Spring(一):初识Spring 一. Spring介绍 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnso ...
- Elasticsearch结构化搜索与查询
Elasticsearch 的功能之一就是搜索,搜索主要分为两种类型,结构化搜索和全文搜索.结构化搜索是指有关查询那些具有内在结构数据的过程.比如日期.时间和数字都是结构化的:它们有精确的格式,我们可 ...
- vue中移动端自适应方案
安装 lib-flexible 1.npm i lib-flexible 2.在项目入口文件 main.js 里 引入 lib-flexible import ‘lib-flexible’ 3.添加m ...
- Java heap size
今天在性能诊断工作中遇到 Java heap size, 下面是它的相关的概念. 什么是Java heap size ? Java heap size 堆栈大小, 指Java 虚拟机的内存大小.我的理 ...
- 模拟赛DAY1 T2腐草为萤
2.腐草为萤(dzy.cpp/c) [题目背景] 纤弱的淤泥中妖冶颓废在季夏第三月最幼嫩的新叶连凋零都不屑何必生离死别——银临<腐草为萤> [问题描述] 扶苏给了你一棵树,这棵树上长满了幼 ...
- java valueOf
valueOf 方法可以将原生数值类型转化为对应的Number类型,java.lang.Number 基类包括ouble.Float.Byte.Short.Integer 以及 Long派生类, 也可 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_06 Set集合_4_Set集合存储元素不重复的原理
set集合元素为什么不能重复 集合重写了toString的方法所以打印是里面的内容 往里面存了三次abc 哈希表,初始容量是16个 set集合存储字符串的时候比较特殊 横着是数组,竖着就是链表结构.跟 ...