IOC操作Bean
xml配置文件
- id属性:唯一标识
- class属性:l类全路径
-
基于xml方式注入属性
DI 依赖注入 就是注入属性
set 方法注入
- 在
标签中使用property - name 类中属性名称
- value 向属性中注入的值
- 在
- 有参构造方法注入
- 在
标签中使用constructor-arg - name
- value
- 在
- p名称空间注入
- 引入p属性
- p:bname
- p:bauthor
xml方式注入其他类型属性
两种类型bean
- 普通bean 返回类型=配置文件中定义的bean类型
- 工厂bean FactoryBean 可以不一样
- 工厂bean
- 实现接口FactoryBean
- 方法中定义返回类型
- bean的作用域
- 单实例 默认
- 多实例
- 可以通过bean标签中的scope属性设置
- 默认值 singleton 单实例对象 加载配置文件时就创建
- prototype 多实例对象 getBean()时才进行创建
- request
- session
bean的生命周期
根据制定装配规则(属性名称或者属性类型),spring可以自动将匹配的属性值进行注入
- autowire=
基于注解方式操作bean
注解
- 代码特殊标记
-
spring针对bean管理中提供的注解
@Component@Service@Controller@Repository
基于注解方式实现对象创建
开启组件扫描
- 添加注解
组件扫描配置
use-defalut-filters="false" 需要自己配置filter<context:include-filter type='' expression=''>
基于注解方式实现属性注入
```java @AutoWired 根据属性类型进行自动装配 对象类型 byType @AutoWired private UserDap userDao; @Qualifier 根据属性名称进行注入 搭配@AutoWired byName
@Resource 根据类型或者名称
@Value 注入普通类型属性
@Value(value=”abv”) //等价property private String name;
<a name="FfiTJ"></a>#### 完全注解开发- 创建配置类,替代xml配置文件```java@Configuration//配置类@ComponentScan(basePackages)// 加载配置类ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class)
AOP
基础概念
-
底层原理
有接口时,使用JDK动态代理
创建接口实现类的代理对象
jdk动态代理
使用proxy类里的方法创建代理对象
newProxyInstance(ClassLoader loader,类<?> interfaces,InvocationHandler h)
创建代理对象代码
- 实现InvocationHandler接口
- 有参构造传递对象
- 增强逻辑
- 原方法实现
- menthod.invoke(obj,args)
- 调用proxy.newProxyInstance
3.
没有接口时,使用CGLIB动态代理
1.创建当前类子类的代理对象
术语
连接点
-
切入点
-
通知(增强)
实际增强的逻辑部分
多种类型
动作
-
AOP操作
spring框架一般都是基于AspectJ实现AOP
AspectJ,独立AOP框架
切入点表达式
作用:知道对哪个类里面的哪个方法进行增强
- 语法结构
- execution(【权限修饰符】【返回类型】【类全路径】【方法名称】【参数列表】)
- 对add方法进行增强
- execution(*com.atguigu.dao.BookDao.add(..))
- 对所有方法进行增强
- execution( com.atguigu.dao.BookDao.(..))
对所有类,所有方法进行增强
在spring配置文件中,开启注解扫描
- 使用注解创建User和UserProxy对象
- 在增强类上面添加注解@Aspect
- 在spring配置文件中开启生成代理对象
<aop:aspectj-autoproxy/>//配置不同类型的通知@Before(value="execution()")@After()最终通知@AfterReturning()后置通知@AfterThrowing()@Around()
相同切入点获取
```xml @Pointcut(value=execution()) public void demo(){ }
@Before(value=”demo()”)
<a name="bdPa0"></a>#### 有多个增强类对同一个方法进行增强,通过order注解改变优先级<a name="Y0hqe"></a>### AspectJ配置文件```xml<aop:config>切入点<aop:pointcut id = "" expression="">配置切面<aop:aspect ref="增强类">作用在具体的方法上<aop:before method=""pointcut-ref=''>
完全注解开发
- config配置文件
JdbcTemplate
概念
-
准备工作
bean.xml
添加删除修改功能
- update(String sql,Object… args )
查询功能
- 查询返回某个值
- queryForObject(String sql,Class
requiredType)
- queryForObject(String sql,Class
- 查询返回对象
- queryForObject(String sql,RowMapper
rowMapper,Object… args) - RowMapper是接口,返回不同数据类型,使用这个接口实现类完成数据封装。
- queryForObject(String sql,RowMapper
- 查询返回集合
- query(String sql,RowMapper
rowMapper,Object… args)
- query(String sql,RowMapper
- 批量添加删除修改功能
- batchUpdate(String sql,List
- 查询返回某个值
事务:数据库操作的最基本单元,要么都成功,要么都失败
四个特性ACID
经典转钱案例
- 开启事务操作
- 进行业务操作
- 没有发生异常,提交事务
- 出现异常,事务回滚
- spring中进行事务操作管理(一般添加到service层)
- 编程式事务管理
- 声明式事务管理
- 一般使用声明式事务管理
- 基于注解方式
- 基于xml配置文件方式
- 底层使用AOP原理
Spring事务管理API
- 提供一个接口,代表事务管理器,这个接口针对不同框架提供不同的实现类
- PlatformTransactionManager
基于注解方式声明式事务管理 ```java
// 引入tx名称空间 // 开启事务注解 @Transactional( propagation()事务传播行为 isolation()隔离级别 timeout()超时时间 readOnly()是否只读 rollbackFor()回滚 noRollBackFor()不回滚 )
```
