IOC和DI区别
ioc:控制反转 对象创建交给spring配置
di:依赖注入 向类里面属性中设置值
关系:依赖注入不能单独存在,需要在ioc基础上完成操作
bean实例化的三种方式:无参构造、静态工厂、实例工厂
属性注入(xml)的几种方式:set方法、有参构造、接口注入
常用注解注入属性,需要注意的是
在service类里面定义dao类型属性 Autowired不需要匹配对象属性的value值userDao。
注入属性第二个注解 @Resource,这个注解的name值需要与dao对象属性的value值userDao匹配
通常情况@Autowired是通过byType的方法注入的,可是在有多个实现类的时候,byType不能确定唯一的实现类,就会通过byName的方式去匹配,所以有多个实现类的时候,变量名应该不同,否则会报错
Spring的注解装配Bean
Spring2.5 引入使用注解去定义Bean
- @Component 描述Spring框架中Bean
Spring的框架中提供了与@Component注解等效的三个注解
- @Repository 用于对DAO实现类进行标注(dao层)
- @Service 用于对Service实现类进行标注(service层)
- @Controller 用于对Controller实现类进行标注(web层)
注解进行属性注入
普通属性:@Value(value="..."),这时候可以不写setter方法
对象属性:@Resource(name = "....")
或者采用 @Autowired
@Qualifier(value = "plane")
//因为只有一个属性value,所以可以直接写。一般需要value="..."
@Component("user")
public class User {
@Value(value="Spring")
private String s;
public void sayHello(){
System.out.println("Hello World.");
}
@Override
public String toString() {
return "User{" +
"s='" + s + '\'' +
'}';
}
}
IOC底层原理:dom4j解析配置文件+反射机制
AOP
joinpoint(连接点):类里面可以被增强的方法称之为连接点
pointcut(切入点):指我们要对哪些joinpoint进行拦截的定义
advice(通知/增强):拦截到joinpoint之后要做的事情就是通知。通知分为前置通知,后置通知,
异常通知,最终通知,环绕通知(切面要完成的功能)。
aspect(切面):切入点和通知的结合,将增强用到切入点的过程。
aop底层原理:动态代理方式实现
面向切面编程(aop)是对面向对象编程(oop)的补充,
面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象, 是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。
AOP的注解方式:
bean.xml中:
AOP的xml方式实现:
JdbcTemplate实现CRUD操作
查询的具体实现:
查询返回某一个值
查询返回对象
查询返回集合
MyRowMapper和查询单个对象时一样,不用改变。
dao使用jdbcTemplate
Spring的事务管理
spring管理事务的两种方式:
第一种:编程式事务管理(不用)
第二种:声明式事务管理
1.基于XML配置文件实现
2.基于注解实现
spring管理事务的api:
接口 PlatformTransactionManager 事务管理器
spring针对不同的dao层框架,提供接口不同的实现类
(1)首先配置事务管理器
(2)配置事务增强
(3)配置切面
使用注解方式配置事务:
第三步:在要使用事务的方法所在类上面添加注解