Spring基础总结(第一周课)



一、Java基础

1.注解

1.1概念

    他提供了一种安全的类似注释的机制,用来将任何的信息或元数据与程序进行关联。直观明了的说,注解就是信息与程序的业务逻辑无关,并且供指定的工具或框架使用。
    Java注解是附加在代码中的一些元信息,便于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。 它不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用,包含在java.lang.annotation包中。

1.2内置注解

    常用注解列举
    @Override:提示子类要复写父类中被它修饰的方法;
    @Suppress Warnnings:组织警告
    @FunctionalInterface:函数式接口注解(Java1.8版本引入),是一个具有一个方法的普通接口

1.3元注解

    基础知识再现:
@Retention:定义生命周期
RetentionPolicy.SOURCE:在编译阶段丢弃。
RetentionPolicy.CLASS:在类加载时丢弃。
RetentionPolicy.RUNTIME:始终不丢弃,最常用。
@Target:(类、方法、局部变量或成员变量、参数等)用于什么地方
ElementType.CONSTRUCTOR:用于描述构造器
ElementType.FIELD:成员变量、对象、属性(包括enum实例)
ElementType.LOCAL_VARIABLE:用于描述局部变量
ElementType.METHOD:用于描述方法
ElementType.PACKAGE:用于描述包
ElementType.PARAMETER:用于描述参数
ElementType.TYPE:用于描述类,接口(包括注解类型)或enum声明。
@Documented:注解是否包含在JavaDoc中;
@Inherited:是否允许子类继承该注解;
即:父类P有注解A,如果A用@Inherited修饰,那么子类C也继承父类的注解A)
@Repeatable:指定注解可重复使用
即:用@Repeatable修饰的注解A,用A在定义或修饰某个类的时候,A可重复出现

1.4自定义注解

1.4.1定义CustomDescription注解

注意:

  1. 自定义注解中,注解的成员变量义无参数的方法形式声明
  2. CustomDescriptions.class为注解容器
  3. 若注解(非容器)中有一个Value属性,则在使用注解时直接把值写入括号内,而作为容器则需要将属性定义为数组
  4. 操作界面如下:在这里插入图片描述
1.4.2实现继承关系

建立两个类分别添加1、2个注解

Person:
package CusAnnontation;
@CustomDescription(description="基类")
@CustomDescription(description="人")
public class Person{
......
}
Student:
package CusAnnontation;
@CustomDescription("学生")
  1. 若注解(不是注解容器)中只有一个value的属性,则在使用注解时,可直接把值写入括号内。
  2. 作为注解容器,需要将属性定义为数组。

1.5注解使用场景经介绍

  1. 使用注解做bean的属性值校验
  2. 使用注解做权限控制
  3. 代替配置文件功能,像Spring基于注解的配置,减少了xml的配置
  4. 可以生成文档,像Java代码注释中的@see、@param等

2.反射

2.1反射机制

    在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

2.2理解Class类

首先明确Class也是一个类,只是它是一个描述类的类,也可以生成对象。
一般获取Class对象的主要方式如下:

  1. 通过类名获取
 Class<类名> c = 类名.class
  1. 通过对象获取
 Class<类名> c = objet.getClass();
  1. 通过全类名获取
Class<类名> c = Class.forName(全类名)

(全类名:类所在的包名+类名)
在这里插入图片描述

  1. Class类常用方法:
    在这里插入图片描述
public static void main(String[] args) throws Exception {
// 以String.class为例
String str = new String();
Class cl = str.getClass();
//获取包名+类名 java.lang.String
cl.getName();
//只获取类名 - String
cl.getSimpleName();
//获取数组的Class对象,因为所有的Java类都继承自Object,数组也一样.所以数组本身也是个Class, 得到数组的Class自然也可以转回数组.
cl.getComponentType();
//返回构造器数组,包括超类的公有成员.
cl.getConstructors();
//返回方法数组,包括超类的公有成员.
cl.getMethods();
//返回域(属性)数组,包括超类的公有成员.
cl.getFields();
// 返回全部构造器数组,无论是public/private还是protected,不包括超类的成员.
cl.getDeclaredConstructors();
//返回全部域数组,无论是public/private还是protected,不包括超类的成员.
cl.getDeclaredFields();
//返回全部方法数组,无论是public/private还是protected,不包括超类的成员.
cl.getDeclaredMethods();
//获取类前的修饰符
cl.getModifiers();
}

2.3反射的使用

eg:

1_Reflection
 method.invoke(obje,"inputParams");

二、Spring基础

1.Spring框架介绍

1.1容器与框架的概念

  • (1)什么是容器?Servlet能否独立运行?
    Servlet:主要功能在于交互式地浏览和生成数据,生成动态Web内容。运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
  • (2)客户端与Servlet交互过程
    在这里插入图片描述
  • (3)什么是框架?
    LDAP:轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP)
    框架不仅要负责管理某些Bean的生命周期(容器的功能),还需要负责搭建某些基础设施(那些通用的部分)

1.2 Spring模块

  • 核心容器(Core Container):由spring-core, spring-beans,spring-context,spring-context-support和spring-expression(Spring Expression Language)组成。
    Spring-core和Spring-Beans是框架的基础,主要实现了控制反转(IOC)和依赖注入(DI)。(完成部分对象生命周期管理)
  • AOP(Aspect Oriented Programming)面向切面编程
    Spring-AOP提供了一个AOP面向切面编程的实现。
    Spring-aspects模块提供了与AspectJ的继承。
  • 消息发送
    Spring4 包含了Spring-messaging模块,对Spring集成项目Message、MessageChannel和MessageHandler进行重要的抽象,是基于消息发送应用的基础。
  • 数据访问/集成: Spring-JDBc,ORM,OXM JMS和事物spring-tx模块。
    -ORM:(Object Relation Mapper,ORM)
    -OXM:O 代表 Object,X 代表 XML。它的目的是在 Java 对象(几乎总是一个 plain old Java object,或简写为 POJO)和 XML 文档之间来回转换。
    -JMS:JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
  • Web:webmvc(重点),Spring-websocket和spring-webflux。
  • 测试:Spring-test.

2.依赖注入DI与控制反转IOC

2.1 依赖注入

  • 在面向对象程序设计中,主要关系有泛化(继承)、聚合/组合,关联和依赖关系。依赖关系比较常见,但是种依赖关系不符合软件系统设计中的高内聚低耦合原则。
  • 依赖注入,就是为了在软件系统中实现解耦(或降低模块之间的耦合关系),提高组件重用率,并且为系统搭建一个灵活、可扩展的平台。
  • 依赖关系实现
class A{
	B b;
    public void test(){
       b = new B();
       b.do();
	}
}
class B{
	public void do(){
	      System.out.println(“wo shi shei?);	
	}
}

在test()方法中调用了B类的do()方法,也就是A依赖B,但是方法的调用,需要用到B的对象b,所以,这里就用new B()对b进行了实例化。即对象b的创建由A自己来完成。

2.2 控制反转

把控制权交出去。通过控制反转,实现依赖注入
在这里插入图片描述

  • 有别于前面的b的创建由A来完成,这里把b的创建交给IOC容器完成,即实现了控制权的反转(本来由A自己控制的,但交个了IOC容器)。在A中用到b时,由IOC容器将B注入到A。可以利用Java反射技术实现。
  • 19
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值