Java程序员必备框架—Spring全家桶的前世今生详细梳理

前言

在工作中经常会发现很多同事连最常用的SSM框架使用起来也经常忘这忘那的,关于spring甚至只记得IOC、DI、AOP,然后就在网上找资料浪费大部分时间,所以本文重温了一遍帮大伙加深理解,同时做个整理,以后再忘来看这篇文章就好了。

我平时也会收集一些不错的spring学习书籍PDF,毕竟程序员的书都挺贵的,不可能每本都买实体,自己啃完也会梳理学习笔记,都在这了>>spring一网打尽,直接点击就可以无偿获取。

1. 体系结构

image

Spring是模块化的,可以选择合适的模块来使用,其体系结构分为5个部分,分别为:

Core Container

核心容器:Spring最主要的模块,主要提供了IOC、DI、BeanFactory、Context等,列出的这些学习过Spring的同学应该都认识

Data Access/Integration

数据访问/集成:即有JDBC的抽象层、ORM对象关系映射API、还有事务支持(重要)等

Web

Web:基础的Web功能如Servlet、http、Web-MVC、Web-Socket等

Test

测试:支持具有Junit或TestNG框架的Spring组件测试

其他

AOP、Aspects(面向切面编程框架)等

2. IOC

2.1 引入耦合概念

耦合:即是类间或方法间的依赖关系,编译时期的依赖会导致后期维护十分困难,一处的改动导致其他依赖的地方都需改动,所以要解耦

解耦:解除程序间的依赖关系,但在实际开发中我们只能做到编译时期不依赖,运行时期才依赖即可,没有依赖关系即没有必要存在了

解决思路:使用Java的反射机制来避免new关键字(通过读取配置文件来获取对象全限定类名)、使用工厂模式

2.2 IOC容器

Spring框架的核心,主要用来存放Bean对象,其中有个底层BeanFactory接口只提供最简单的容器功能(特点延迟加载),一般不使用。常用的是其子类接口ApplicationContext接口(创建容器时立即实例化对象,继承BeanFactory接口),提供了高级功能(访问资源,解析文件信息,载入多个继承关系的上下文,拦截器等)。

ApplicationContext接口有三个实现类:ClassPathXmlApplicationContext、FileSystemoXmlApplication、AnnotionalConfigApplication,从名字可以知道他们的区别,下面讲解都将围绕ApplicationContext接口。

容器为Map结构,键为id,值为Object对象。

2.2.1 Bean的创建方式

无参构造

只配了id、class标签属性(此时一定要有无参函数,添加有参构造时记得补回无参构造)

普通工厂创建

可能是别人写好的类或者jar包,我们无法修改其源码(只有字节码)来提供无参构造函数,eg:

// 这是别人的jar包是使用工厂来获取实例对象的
public class InstanceFactory {
    public User getUser() {
        return new User();
    }
}

 <!--  工厂类  -->
<bean id="UserFactory" class="com.howl.entity.UserFactory"></bean>
<!--  指定工厂类及其生产实例对象的方法  -->
<bean id="User" factory-bean="UserFactory" factory-method="getUser"></bean>

静态工厂创建
<!--  class使用静态工厂类,方法为静态方法生产实例对象  -->
<bean id="User" class="com.howl.entity.UserFactory" factory-method="getUser"></bean>

2.2.2 Bean标签

该标签在applicationContext.xml中表示一个被管理的Bean对象,Spring读取xml配置文件后把内容放入Spring的Bean定义注册表,然后根据该注册表来实例化Bean对象将其放入Bean缓存池中,应用程序使用对象时从缓存池中获取

属性 描述
class 指定用来创建bean类
id 唯一的标识符,可用 ID 或 name 属性来指定 bean 标识符
scope 对象的作用域,singleton(默认)/prototype
lazy-init 是否懒创建 true/false
init-method 初始化调用的方法
destroy-method x销毁调用的方法
autowire 不建议使用,自动装配byType、byName、constructor
factory-bean 指定工厂类
factory-method 指定工厂方法
元素 描述
constructor-arg 构造函数注入
properties 属性注入
元素的属性 描述
type 按照类型注入
index 按照下标注入
name 按照名字注入,最常用
value 给基本类型和String注入
ref 给其他bean类型注入
元素的标签 描述
<list>
<Set>
<Map>
<props>

2.2.3 使用

注意:默认使用无参构造函数的,若自己写了有参构造,记得补回无参构造

XML
<bean id="User" class="com.howl.entity.User"></bean>

ApplicationContext ac = new ClassPathXmlApplicationContext
("applicationContext.xml");
User user = (User) ac.getBean("User");
user.getName();

注解

前提在xml配置文件中开启bean扫描

<context:component-scan base-package="com.howl.entity"></context:component-scan>

// 默认是类名首字母小写
@Comp
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值