Spring学习总结 1. Ioc底层原理 2.属性注入 IOC和DI区别 Spring加载配置文件实现原理 Spring四个常用注解 AOP Log4j使用 Spring 事务管理 Java 注解 解析注解 Spring JDBCTemplate

  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包