Spring自学笔记

本文介绍了Spring框架在企业级开发中的重要性,特别是其IoC(控制反转)和AOP(面向切面编程)机制。通过实例讲解了如何使用Spring创建对象,以及如何利用IoC和AOP进行对象管理和横切关注点的分离。
摘要由CSDN通过智能技术生成

##部分笔记

Spring概述

  • 企业级开发框架,关注点在于软件设计层面;
  • 已经成为Java领域的行业标准;
  • 提供了各个层面的解决方案:Spring MVC、Spring Data、Spring Cloud
  • Spring两大核心机制IoC和AOP

Spring框架的两大机制

  1. IoC控制反转(一般新建对象需要用户手动new出一个类的新对象,但是使用IoC后用户不需要自己new了,IoC帮用户new出对象后再将对象将给用户使用)/DI依赖注入
  2. 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);

  1. 通过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完成注入。

自动装载有两种方式:

  1. byName:通过属性名称自动装载
  2. 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代理来得方便。

  1. 切面:横切关注点被模块化的抽象对象;
  2. 通知:切面对象完成的工作;
  3. 目标:被通知的对象,即被横切的对象;
  4. 代理:切面、通知、目标混合后的对象;
  5. 连接点:通知要插入在业务代码的具体位置;
  6. 切点:AOP通过切点定位到连接点。

Java基础——利用反射机制创建对象

反射概念

Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。(先知道存放着所有类的class之后,根据我们写的代码再去创建对象)。

Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁。

白话理解一下反射:Java是先编译再运行的,如果机器在编译时已经知道了对象或者类的具体信息,就可以直接操作不需要反射;而如果编译的时候不知道对象或者类的具体信息,就要通过反射来实现了。比如类的名称属性和方法都在XML文件中,需要在运行时访问XML文件,动态获取类的信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值