Spring的笔记到此就结束了 有点乱,希望对大家有所帮助,有什么提议可以留言或联系我.
fighting!fighting!
自动注入
- 在spring配置文件中对象名和ref="id" id名相同使用自动注入,可以不配置
- 两种配置办法
- 在
中通过autowire=""配置,只对这个 生效 - 在
中通过 default-autowire="" 配置,表当前文件中所有 都是全局配置内容
- 在
- autowire="" 可取值
- default:默认值,根据全局default-autowire=""值 默认全局和局部都没有配置情况下,相当于 no
- no:不自动注入
- byName:通过名称自动注入,在spring 容器中找类的id
- byType:根据类型注入
- 在spring容器中 不可以出现两个相同类型的
- 在spring容器中 不可以出现两个相同类型的
- constructor:根据构造方法注入
- 提供对应参数的构造方法(构造方法参数中包含注入对象的那个)
- 底层使用byName ,构造方法参数名和其他
的id相同
Spring 中加载properties文件
-
在src下新建 xxx.properties文件
-
在spring配置文件中先引入 xmlns:context,在下面添加
- 如果需要记载多个配置文件逗号分隔
-
添加了属性文件记载,并且在
中开启自动注入注意的地方 - SqlSessionFactoryBean的id不能叫做sqlSessionFactory
- 修改
- 把原来通过ref引用替换成value赋值自动注入只能影响ref,不会影响value赋值
-
在被spring管理的类中通过@Value("$")取出propreties中内容
- 添加注解扫描
- key和变量名可以不相同
- 变量类型任意只要保证key对应的 value能转换成这个类型就可以
scope 属性
的属性 - 作用:控制对象有效范围(单列,多列等)
标签对应的对象默认时单列的 - 无论获取多少次,都是同一个对象
- scope可取值
- singleton 默认时单例
- prototype 多例,每次获取重新实列化
- request 每次请求重新实例化
- session 每个会话对象内,对象时单例的
- application 在application对象内时单例的
- global session spring 推出的一个对象,依赖于 spring-webmvc-protlet,类似于session
单列设计模式
- 作用:在应用程序有保证最多只能有一个实列
- 好处:
- 提升运行效率
- 实现数据共享.案例:application 对象
- 懒汉式
- 由于添加了锁,所以导致效率低
- 饿汉式
- 解决了懒汉式中多线程访问可能出现同一个对象和效率低问题
声明式事务
-
编程式事务:
- 由程序员来编写事务控制代码
- OpenSessionInView 编程式事务
-
声明式事务
- 事务控制代码已经由spring写好.程序员只要声明出哪些方法需要进行事务控制和如何进行事务控制
-
声明式事务都是针对于 ServiceImpl类下方法的
-
事务管理器基于通知(advice)的
-
在spring配置文件中配置声明式事务
<context:property-placeholder location="classpath:db.properties,classpath:second.pr operties"/> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverMa nagerDataSource"> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- spring-jdbc.jar 中 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSour ceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置声明式事务 --> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <!-- 哪些方法需要有事务控制 --> <!-- 方法以 ins 开头事务管理 --> <tx:method name="ins*" /> <tx:method name="del*" /> <tx:method name="upd*" /> <tx:method name="*" /> </tx:attributes> </tx:advice> <aop:config> <!-- 切点范围设置大一些 --> <aop:pointcut expression="execution(* com.bjsxt.service.impl.*.*(..))" id="mypoint" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="mypoint" /> </aop:config>
-
声明式事务中属性解释
-
name="" 哪些方法需要有事务控制
- 支持*通配符
-
readonly="boolean" 是否是只读事务.
- 如果为true,告诉数据库此事务为制度事务.数据优化,会对性能有一定提升,所以只要是查询的方法,建议使用此数据.
- 如果false(默认值),事务需要提交的事务,建议新增,删除,修改
-
propagation 控制事务传播行为.
- 当一个具有事务控制的方法被另一个有十五控制的方法调用后,需要如何管理事务(新建事务?在事务中执行?把事务挂起?报异常?)
- REQUIRED(默认值):如果当前有事务,就在事务中执行,如果当前没有事务,新建一个事务.
- SUPPORTS:如果当前有事务就在事务中执行,如果当前没有事务,就在非事务状态下执行
- MANDATORY:必须在事务内部执行,如果当前有事务,就在事务中执行,如果没有事务,报错.
- REQUIRES_NEW:必须在事务中执行,如果当前没有事务,新建事务,如果当前有事务,把当前事务挂起.
- NOT_SUPPORTED:必须在非事务下执行,如果当前没有事务,正常执行,如果当前有事务,把当前事务挂起.
- NEVER:必须在非事务状态下执行,如果当前没有事务,正常执行,如果当前有事务,报错.
- NESTED:必须在事务状态下执行.如果没有事务,新建事务,如果当前有事务,创建一个嵌套事务.
-
isolation="" 事务隔离级别
-
在多线程或并发访问下如何保证访问到的数据具有完整性的
-
脏读
- 一个事务a读取到另一个事务b中未提交的数据,另一个事务中数据可能进行了改变,此时a事务读取的数据可能和数据库中数据说不一致的,此时认为数据库是脏数据,读取脏数据过程叫做脏读
-
不可重复读
- 主要针对的是某行数据
- 主要针对的操作是修改操作
- 当事务a第一次读取事务后,事务b对事务a读取的数据进行修改,事务a中再次读取的数据和之前读取的数据不一致,过程不可重复度
-
幻读
此处省略无数理论(百度或找原笔记瞅瞅)
-
-