Java框架 Spring 核心机制

2.专注于自己业务逻辑,统一的行为(日志、安全等)抽象出来统一处理

3.易于单元测试

4.方便事物处理

5.Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部

6 . spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等

7 . spring属于低侵入式设计,代码的污染极低

8 . 提供了单例模式支持。

Spring七个模块

Spring context

Spring AOP

Spring DAO

Spring ORM

Spring Web

Spring MVC

Spring Core

AOP和IOC

Aop

允许程序通过分离的应用业务逻辑与系统级别服务。程序员只需专注自己的业务逻辑,而不需要管系统级服务。容器中的对象能享有容器中的公共服务(日志、安全)。

Java框架 Spring 核心机制

原理

通过动态代理做到这一点。用到了代理模式,代理模式是一种静态代理,而动态代理就是利用反射和动态编译将代理模式变成动态的。得知被代理类后通过反射得知他的一切信息,然后动态编译成代理类的class文件(动态组装成代理类,生成java文件,再编译成class文件)。

优点

提供另外一种编程思路,可以把类似的行为抽离出来统一处理。

Ioc

依赖注入(DI)和控制反转(Inversion of Control)是同一个概念。控制权的反转,在程序中对象的控制权转到容器而不是程序员自己控制,促进了松耦合。依赖注入,将相互依赖的对象分离,在Spring配置文件中,描述他们的依赖关系,用到一个对象时注入,而不需要New一个对象。

原理

通过工厂+反射将我们的bean放到容器中,当我们想用某个bean的时候,只需要调用getBean(“beanID”)方法。

优点

解耦、统一管理bean,缺点占用内存多、构造对象慢

beanFactory与ApplicationContext

二者是父子关系

Spring的IoC容器就是一个实现了BeanFactory接口的可实例化类,它就是 Spring IoC 容器的真面目。ioc使用 BeanFactory 来实例化、配置和管理 Bean。

如果说BeanFactory是Spring的心脏,那么ApplicationContext就是完整的躯体了,ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。

(1)MessageSource, 提供国际化的消息访问

(2)资源访问,如URL和文件

(3)事件传播特性,即支持aop特性

1.ApplicationContext接口继承BeanFactory接口,Spring核心工厂是BeanFactory ,BeanFactory采取延迟加载,第一次getBean时才会初始化Bean, ApplicationContext是会在加载配置文件时初始化Bean。

2.ApplicationContext是对BeanFactory扩展,他可以国际化处理、资源访问、事件传播。

Bean的生命周期

Java框架 Spring 核心机制

建立

1 . Bean的建立

由BeanFactory读取Bean定义文件,并生成各个实例。

初始化

2 . 依赖注入

3.setBeanName()

4.setBeanFactory()

5.processBeforeInitialization()

初始化之前都会执行这个实例的

processBeforeInitialization()方法。

6.afterPropertiesSet()

7.init-method

8.processAfterInitialization()

业务逻辑

9.使用Bean做一些业务逻辑

销毁

10.destroy()

11.destroy-method

Java框架 Spring 核心机制

Bean的作用域

1. Singleton: 这是默认的作用域,这种范围确保不管接受多少个请求,每个容器中只有一个bean的实例,单例模式有BeanFactory自身维护;

2. Prototype: 原形范围与单例范围相反,为每一个bean请求提供一个实例;

3. Request: 在请求bean范围内会为每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收;

4. Session: 与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效;

Java框架 Spring 核心机制

Servlet生命周期

1. 初始化阶段 调用init()方法

2. 响应客户请求阶段 调用service()方法

3. 终止阶段 调用destroy()方法

设值注入和构造注入及其区别

设值注入:类中定义setter()方法,在配置文件中注入参数

property name=“country” value=“China” />

构造注入:类中声明一个构造方法,并在此方法的参数中定义要注入的对象。

设值注入优点

1. 与传统的JavaBean的写法更相似,程序开发人员更容易理解、接受,依赖关系显得更加直观、自然。

2. 对于复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,难以阅读。而设值注入不会

三、在某些属性可选的情况下,多参数的构造器更加笨重。

构造注入优点

1. 构造注入可以在构造器中决定依赖关系的注入顺序,优先依赖的优先注入。

2. 对于依赖关系无须变化的Bean,构造注入更有用处。

建议:采用设值注入为主,构造注入为辅的注入策略。对于依赖关系无需变化的注入,尽量采用构造注入;而其它的依赖关系的注入,则考虑设值注入。

最后

现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。

所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。

对于依赖关系无须变化的Bean,构造注入更有用处。

建议:采用设值注入为主,构造注入为辅的注入策略。对于依赖关系无需变化的注入,尽量采用构造注入;而其它的依赖关系的注入,则考虑设值注入。

最后

现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。

所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。

[外链图片转存中…(img-fpj3XH8S-1719272560693)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值