##部分笔记
Spring概述
- 企业级开发框架,关注点在于软件设计层面;
- 已经成为Java领域的行业标准;
- 提供了各个层面的解决方案:Spring MVC、Spring Data、Spring Cloud
- Spring两大核心机制IoC和AOP
Spring框架的两大机制
- IoC控制反转(一般新建对象需要用户手动new出一个类的新对象,但是使用IoC后用户不需要自己new了,IoC帮用户new出对象后再将对象将给用户使用)/DI依赖注入
- AOP面向切面编程(传统的编程是自下而上,而面向切面是指将许多模块从横面切开,找出他们共同需要的功能,再把此功能抽象出形成一个新的类,这样每次要使用该功能时只需要新建对象即可。)
Spring是企业级开发框架,是软件设计层面的框架,优势在于可以将应用程序进行分层,开发者可以自主选择组件。
//创建实体类Student
@Data
Public class Student {
Private long id;
Private String name;
Private int age;
}
//传统的开发方式,手动new
Student student = new Student();
student.setId(2l);
student.setName("张三”);
student.setAge(22);
- 通过IoC创建对象,在配置文件(放在resource包里)中添加需要管理的对象,XML格式的配置文件,文件名可以自定义。
IoC底层原理
读取配置文件,解析XML
通过反射机制实例化配置文件中所配置的所有的bean。
Spring的继承
在bean 标签中加上parent=””,如:<bean id = “student” class =”” parent=”stu”></bean>
与Java的继承不同,Java是类层面的继承,子类可以继承父类的内部结构信息;而spring是对象层面的继承,子对象可以继承父对象的属性值,也可以对父对象的属性值进行覆盖。
不同类中的对象可以继承,但是子类的属性一定要包含父类的所有属性,不能出现让父类的属性没地方“安置”的情况(此时会抛出异常)。
Spring的依赖(当需要设置bean之间的加载顺序时)
与继承相似,依赖也是描述 bean和bean之间的一种关系,配置依赖后,被依赖的bean一定先创建,接着才创建依赖的bean,比如A依赖于B,那么则先创建B,再创建A。
Spring的p命名空间
P命名空间是对IoC/DI的简化操作,使用p命名空间可以更加方便地完成bean的配置以及bean之间的依赖注入。
Spring的工厂模式
- 静态工厂方法
- 实例工厂方法
IoC的自动装载(Autowire)
IoC负责创建对象,DI负责完成对象的依赖注入,通过配置property标签的ref属性来完成,同时spring提供了另外一种更加简便的依赖注入方式:自动下载,不需要手动配置property,IoC容器会自动选择bean完成注入。
自动装载有两种方式:
- byName:通过属性名称自动装载
- byType:通过属性的数据类型自动装载,一个类型只能在xml中有一个对象。
AOP
AOP:Aspect Oriented Programming面向切面编程。在OOP中我们以类(class)作为我们的基本单元,而AOP中以切面(Aspect)为基本单元。
- 术语:
- Aspect(切面)
Aspect由pointcount和advice组成它既包含了横切逻辑的定义, 也包括了连接点的定义. Spring AOP就是负责实施切面的框架, 它将切面所定义的横切逻辑织入到切面所指定的连接点中.
AOP的工作重心在于如何将增强织入目标对象的连接点上, 这里包含两个工作:如何通过 pointcut 和 advice 定位到特定的 joinpoint 上
如何在 advice 中编写切面代码。
可以简单地认为, 使用 @Aspect 注解的类就是切面。
优点:
- 降低模块之间的耦合度
- 使系统更容易扩展
- 更好的代码复用
- 非业务代码更加集中、不分散,便于统一管理
- 业务代码更加简洁纯粹,不参杂其他代码的影响。
如何使用?
创建Maven工程,在pom.xml中添加依赖
代理对象需要实现委托对象的所有功能。
动态代理是反射机制一个很重要的应用。
context:component-scan 将自己某个包中的所有类进行扫描,如果在某类之前添加了’@Component’,则将该类扫描到IoC容器中,即IoC管理该类的对象。
‘ aop:aspectj-autoproxy ’让spring框架结合切面类和目标类自动生成动态代理对象。
动态代理远不如IoC代理来得方便。
- 切面:横切关注点被模块化的抽象对象;
- 通知:切面对象完成的工作;
- 目标:被通知的对象,即被横切的对象;
- 代理:切面、通知、目标混合后的对象;
- 连接点:通知要插入在业务代码的具体位置;
- 切点:AOP通过切点定位到连接点。
Java基础——利用反射机制创建对象
反射概念
Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。(先知道存放着所有类的class之后,根据我们写的代码再去创建对象)。
Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁。
白话理解一下反射:Java是先编译再运行的,如果机器在编译时已经知道了对象或者类的具体信息,就可以直接操作不需要反射;而如果编译的时候不知道对象或者类的具体信息,就要通过反射来实现了。比如类的名称属性和方法都在XML文件中,需要在运行时访问XML文件,动态获取类的信息。