IOC容器
控制反转,翻转资源获取方向
任何功能都基于IOC容器
DI:依赖注入
new ClassPathXmlApplicationContext:读取类路径下的XML文件创建IOC
new FileSystemXmlApplicationContext:读取文件系统路径的XML创建IOC
基于XML管理bean
获取bean
根据id获取
根据类型获取 .class
给bean赋值配置文件
bean
property name value
引入外部bean
property name ref
内部bean
引入外部属性文件
<context:property-placeholder location="">
级联属性
ref
构造器注入
constructor value
bran的作用域
scope IOC初始化时 默认
prototype 获取bean
bean对象初始化之前的操作和之后的操作,由bean的后置处理器负责
基于注解管理bean
XML和注解只是告诉框架中的Java代码如何执行
@Component:普通组件
@Controller控制器组件
@Service业务逻辑组件
@Repository持久化层组件
扫描
<context:component-scan base-package="">
指定匹配模式 resource-pattern
排除要扫描的组件
context:exclude-filter type="annotation" expression=""
仅扫描的组件
context:include-filter type="annotation" expression=""
beanName
组件首字母小写
自动装配
@Autowired
@qualifier value=""
完全注解开发
普通类使用@Configuration
@ConponentScan() //配置自动扫描的包
@bean
整合junit4
加入依赖
spring测试包 spring-test
@RunWith(SpringJunit4ClassRunner.class)
@ContextConfiguration(value={".xml"})
junit5
@SpringJUnitconfig(location={".xml"})
AOP面向切面编程
在不修改源代码的情况下增强代码功能(套)
解耦
采用代理模式
创建代理对象Proxy.newProxyInstance(,)
Lambda表达式:
1、复制小括号;2、写死右箭头;3、落地大括号
环绕通知:前置通知,核心操作,返回通知,异常通知,后置通知
基于注解的AOP
有接口的情况:动态代理(拜把子)
没有接口的情况cglib(认干爹)
1.依赖spring-aspect
2.创建切面类@Aspect
3.@Before,@AfterReturning,@AfterThrowing,@After(value = “execution”)
4.Spring配置文件
开启基于注解的AOP功能aop:aspectj-autoproxy
配置自动扫描的包
一个方法的全部声明信息
joinPoint.getSignature()
重用切入点表达式
@Poincut(“execution()”)
execution(* *…Service.(…))
切面的优先级
外(缓存切面)>内(事务切面)
应用了切面后,真正放在IOC容器中的代理类是对象
声明式事务
只需要声明需求,通过配置,让框架实现功能
事务管理器DataSourceTransactionManager
doBegin()开启事务
doSuspend()挂起事务
doResume()恢复挂起的事务
doCommit()提交事务
doRollback回滚事务
基于注解的声明式事务
1、加入依赖
org.springframework
spring-context //
spring-orm //持久层支持
spring-test //测试
junit
junit
mysql
mysql-connector-java
com.alibaba
druid
2、外部属性文件jdbc:properties
3、Spring配置文件
配置自动扫描的包
引入外部文件
配置数据源
配置jdbcTemplate
装配数据源
4、配置事务管理器
<bean id="ransactionManager" class="*.DataSourceTransactionManager">
<propertity name="" ref="">//只配置数据源
</bean>
开启事务管理器
<tx:annotation-drive transaction-manger="transactionManger">
加注解@Transaction
## 加入日志logback.xml
超时回滚,释放资源timeout= //以秒为单位
默认只在运行异常回滚
事务隔离级别
读未提交isolation = Isolation.READ_UNCOMMITTED
都已提交 .READ_COMMITTED
每次都会开启新事务
propagation = Propagation.REQUIRES_NEW