Spring学习总结

1. Ioc底层原理

  1. 1.       依赖注入
  2. 2.        
  3. 1.       创建对象的时候,向类里面属性里面设置值
  4. 2.        

2.属性注入

 

 

 

 

 

IOC和DI区别

  1. 1.       IOC:控制反转,把对象创建交给Spring进行配置
  2. 2.       DI:依赖注入,向类里面的属性中设置值
  3. 3.       关系: 依赖注入不能单独存在,需要在ioc基础之上完成操作
  4. 1.       实现思想:把加载配置文件和创建对象过程,在服务器启动的时候完成
  5. 2.       实现原理

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概述

  1. 1.       aop :采用面向切面编程,扩展功能不修改源代码实现
  2. 2.       AOP 采取横向抽取机制,取代了传统纵向继承体系重复性代码
  3. 3.        

 

 

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 (忽略警告)

自定义注解

@Target({ElementType.METHOD,ElementType.TYPE})//元注解

@Retention(RetentionPolicy.RUNTIME) //元注解

@Inherited//元注解

@Documented//元注解

public@interfaceDescription {

   String desc();

   String author();

   int age() default 18;

 

}

  1. 3.       如果注解只有一个成员变量,则成员名必须取名为value(),在使用时可以忽略成员名

和赋值号(=

  1. 4.       成员类型是受限的,合法的类型包括原始类型以及String, Class, Annotation, Enumeration
  2. 5.       注解类可以没有成员,没有成员的注解称为标识注解
  3. 6.       注解的作用范围@Target 和声明周期@Retention

(1)@Target 作用范围:包,类,字段,方法,方法的参数,局部变量

(2)@Retention 生命周期: 源文件SOURCE, 编译CLASS ,运行RUNTIME

 

解析注解

  1. 1.       使用反射

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包

 

 

posted @ 2018-05-06 22:39  流星小子  阅读(202)  评论(0编辑  收藏  举报