Spring学习总结
1. Ioc底层原理
|
2.属性注入
|
IOC和DI区别
|
Spring加载配置文件实现原理
(1) ServletContext对象 (2) 监听器 (3) 具体使用: - 在服务器启动的时候,为每个项目创建一个ServletContext对象 - 在ServletContext对象创建的时候,使用监听器可以具体到ServletContext对象在什么时候创建。 - 使用监听器监听到ServletContext对象创建时候,加载spring配置文件,把配置文件 - 配置对象创建 - 把创建出来的对象放到ServletContext域对象里面(setAttribute方法) - 获取对象时候,到ServletContext域得到(getAttribute方法) |
Spring四个常用注解
@Autowired 自动注入 ,可以实现注入属性 @Resource(name=””) 注入属性第二个注解 |
AOP
(1) aop概述 (2) aop底层原理 (3) aop操作相关术语 |
aop概述
|
aop底层原理
底层使用的是动态代理方式实现 |
aop操作相关术语
Public class User{ Public void add (){ } Public void update(){ } Public void delete() { } Public void findAll(){ } }
连接点:类里面可以被增强的连接点,这些方法称为连接点 Pointcut(切入点):在类里面可以有很多的方法被增加,比如实际操作中,只是增强了类里面add方法和update 方法,实际增强的方法称为切入点 Advice(通知/增强): 实际增强的逻辑,称为增强,比如扩展日志功能,这个日志功能称为增强 前置通知:在方法之前执行 后置通知:在方法之后执行 异常通知:在方法出现异常 最终通知:在后置之后执行 环绕通知; 在方法之前和之后执行 Aspect(切面):把增强应用到具体方法上面,这个过程称为切面 把增强用到切入点的过程 Target:增强方法所在的类就叫做目标对象 |
Spring 的aop 操作
1. 在spring 里面进行aop操作,使用aspectj实现 (1)aspectj不是spring一部分,和spring一起使用进行aop操作 (2)Spring2.0以后新增了对AspectJ的支持 2.使用AspectJ 实现aop有两种方式 (1)基于aspectj的xml实现 (2)基于aspectJ 的注解的方式 |
Aop的准备操作
1.导入相关的Jar包
2.创建Spring核心配置文件 |
Log4j使用
1 通过log4j可以看到程序中更详细的信息 (1)经常使用log4j查看日志 2 使用 (1)导入log4j的jar包
|
Spring 事务管理
事务概念
1.事务概念 2.事务特性 (四个特性)(原子性,持久性,隔离性,一致性) 3.不考虑隔离性产的读问题 (1)幻读,脏读,不可重复读 4.如何解决读的问题 (1)设置隔离级别 (2)隔离性是指多个事务之间不会产生影响 |
Spring 事务管理
、 2.spring事务管理的api
3.具体接口实现类
|
搭建转账环境
Java 注解
1. JDK 中的注解 @Override (重写) @ Deprecated(过时的)@SuppressWarnings (忽略警告) 2 自定义注解 @Target({ElementType.METHOD,ElementType.TYPE})//元注解 @Retention(RetentionPolicy.RUNTIME) //元注解 @Inherited//元注解 @Documented//元注解 public@interfaceDescription { String desc(); String author(); int age() default 18;
}
和赋值号(=)
(1)@Target 作用范围:包,类,字段,方法,方法的参数,局部变量 (2)@Retention 生命周期: 源文件SOURCE, 编译CLASS ,运行RUNTIME
|
解析注解
package com.gylhaut.ioc; import java.lang.annotation.Annotation; import java.lang.reflect.Method;
publicclass ParseAnn { publicstaticvoid main(String[] args) { try { //1加载类 Class<?> c = Class.forName("com.gylhaut.ioc.Child"); //找到类上的注解 booleanisExist = c.isAnnotationPresent(Description.class); if(isExist){ //拿到注解实例 Descriptiond = c.getAnnotation(Description.class); System.out.println(d.desc()); } Method[] ms = c.getMethods(); for(Method m :ms){ booleanfExist = m.isAnnotationPresent(Description.class); if(fExist){ //拿到注解实例 Descriptiond = m.getAnnotation(Description.class); System.out.println(d.desc()); } } for(Method m : ms){ Annotation[] as = m.getAnnotations(); for(Annotation a : as){ if(ainstanceofDescription){ Descriptiond = (Description)a; System.out.println(d.desc()); } } } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
Spring JDBCTemplate
5. 别忘了导入mysql 数据库驱动的jar包
|