分类:
软件开发(91)
版权声明:本文为博主原创文章,未经博主允许不得转载。
Spring工作原理
内部最核心的就是IOC了,
动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射
反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置
文件来动态的创建对象,和调用对象里的方法的 。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是
在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过
配置类达到的。
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明
管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式)
Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了 也就基本上掌握了Spring.
Spring AOP与IOC
一、 IoC(Inversion of control): 控制反转
1、IoC:
概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean
二、AOP(Aspect-Oriented Programming): 面向方面编程
1、 代理的两种方式:
静态代理:
针对每个具体类分别编写代理类;
针对一个接口编写一个代理类;
动态代理:
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类
Spring 优缺点
它是一个开源的项目,而且目前非常活跃;它基于IoC(Inversion of Control,反向控制)和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层 中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了统一的 接口,采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现Transcation Managment,等等
优点
a. Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为J2EE的 API特制的framework,Spring致力于解决剩下的问题。
b. Spring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。
c. 通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般的属性项或系统属性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性。Inversion of Control的使用(在下面讨论)帮助完成了这种简化。
d. 通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。
e. Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。
f. 使用Spring构建的应用程序易于单元测试。
g. Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。
h. Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。
i. Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如Hibernate)。
Spring确实使你能通过最简单可行的解决办法来解决你的问题。而这是有有很大价值的。
缺点:jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器
内部最核心的就是IOC了,
动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射
反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置
文件来动态的创建对象,和调用对象里的方法的 。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是
在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过
配置类达到的。
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明
管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式)
Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了 也就基本上掌握了Spring.
Spring AOP与IOC
一、 IoC(Inversion of control): 控制反转
1、IoC:
概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean
二、AOP(Aspect-Oriented Programming): 面向方面编程
1、 代理的两种方式:
静态代理:
针对每个具体类分别编写代理类;
针对一个接口编写一个代理类;
动态代理:
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类
Spring 优缺点
它是一个开源的项目,而且目前非常活跃;它基于IoC(Inversion of Control,反向控制)和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层 中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了统一的 接口,采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现Transcation Managment,等等
优点
a. Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为J2EE的 API特制的framework,Spring致力于解决剩下的问题。
b. Spring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。
c. 通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般的属性项或系统属性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性。Inversion of Control的使用(在下面讨论)帮助完成了这种简化。
d. 通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。
e. Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。
f. 使用Spring构建的应用程序易于单元测试。
g. Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。
h. Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。
i. Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如Hibernate)。
Spring确实使你能通过最简单可行的解决办法来解决你的问题。而这是有有很大价值的。
缺点:jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器
相关推荐
面试中可能会涉及到Eureka服务注册与发现、Zuul或Gateway API网关、Hystrix断路器机制、Spring Cloud Config配置中心等话题。 此外,文件名中还提到了Nginx,它是一款强大的反向代理服务器和负载均衡器,常被用于...
面试时,你需要掌握DispatcherServlet的工作原理,ModelAndView对象的使用,以及视图解析器的概念。 Spring Boot简化了Spring应用的启动和配置。它内置了Tomcat服务器,提供了自动配置特性,并且支持通过@...
面试时可能讨论:Spring的Bean管理、AOP原理及应用场景、Spring Boot快速开发、Spring Data JPA等。 4. **iBatis**:iBatis是一个SQL映射框架,它将SQL语句与Java代码分离,避免了JDBC的繁琐操作。iBatis允许开发者...
以上内容仅是Spring框架部分核心概念的概述,Spring还有更多高级特性,如Spring Boot、Spring Data、Spring Security等,这些都是Java开发者面试时可能会遇到的话题。对于求职者来说,深入理解Spring框架及其原理是...
总的来说,对于后端开发者的面试,特别是Java相关的职位,面试官会期望候选人对语言本身、JVM的工作原理以及如何利用Spring框架构建高效应用有深入的理解。通过系统地学习和实践,候选人可以更好地应对面试挑战,为...
5. **Spring Boot**:作为Spring的快速开发工具,面试中可能会问到自动配置、起步依赖、Actuator监控等特性。 MyBatis是一个优秀的持久层框架,它简化了SQL与Java代码的绑定,使得开发者可以更专注于SQL本身。面试...
此外,Spring Boot和Spring Cloud也是近年来的热门话题,面试官可能会询问如何使用它们快速构建微服务架构,以及Spring Cloud的相关组件如Eureka、Zuul、Hystrix等的用途和工作原理。 Redis作为高性能的Key-Value...
- Spring面试专题涵盖了Spring的基础和高级部分,如Bean生命周期、AOP的应用、Spring MVC的工作原理、Spring Data JPA等。 2. **集合框架**: - 集合框架是Java的基础,包括List、Set、Map接口及其实现类如...
在IT行业中,Spring Cloud作为...此外,对于微服务架构的理解,包括服务拆分原则、服务治理的重要性、数据一致性挑战等也是面试中的重要话题。通过深入学习和实践,才能更好地掌握Spring Cloud,提升在IT行业的竞争力。
4. **操作系统原理**:进程与线程的区别、内存管理、虚拟内存、文件系统、操作系统的调度策略等是面试中的常见话题。 5. **数据库设计与SQL**:熟练编写SQL查询,理解关系型数据库的基本概念,如ACID特性、范式理论...
Java编程语言在IT行业中占据着重要的地位,尤其对于有3年工作经验的开发者来说,具备扎实的Java基础和实践经验是面试中的必备条件。本面试宝典旨在帮助这些开发者全面准备Java相关的面试问题,涵盖核心技术、框架、...
生于2003年,由Rod Johnson倡导并创建,是一个开源的Java平台,主要用于简化企业级应用开发。Spring的核心特性是控制反转...理解并掌握这些知识,能帮助你在面试中自信地讨论Spring的相关话题,并展示你的专业技能。
另外,JVM调优也是面试中常问的话题,包括堆大小设置、类加载机制、内存泄漏检测等。 其次,Spring框架是Java企业级应用的基石,其核心特性包括依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented ...
面试中可能会问到JSP的生命周期、指令元素(page、include、taglib)、脚本元素(声明、表达式、脚本let)以及EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)的使用。 **Web Service**...
- `Iterator`是遍历集合的核心工具,面试中可能会要求你解释其工作原理,以及如何使用它来遍历集合。迭代器模式简化了对集合元素的访问,隐藏了集合的内部实现细节。 3. **List接口**: - `List`接口允许存储重复...
Eureka、Zuul、Hystrix、Ribbon、Spring Cloud Config等是常见的面试话题。 7. **MyBatis**:MyBatis是一个持久层框架,它允许开发者用SQL语句编写动态SQL,简化数据库操作。面试中会涉及映射文件、动态SQL、缓存...
11. **JVM内存模型**:面试中经常涉及垃圾回收、内存分区、类加载机制等内容,理解JVM的工作原理有助于优化程序性能。 12. **Spring框架**:Spring是Java企业级应用的主流框架,面试中会考察IoC容器、AOP、Spring ...
数据库方面,MySQL的查询优化、事务处理、存储引擎、索引原理等是常见面试话题。你需要具备编写高性能SQL的能力,并能解释不同索引类型(BTree、Hash、Full-text等)的优缺点。 Redis作为内存数据结构存储系统,...
面试中可能会涉及:自动配置原理、起步依赖、Actuator监控、健康检查、Spring Boot Admin、微服务治理、Spring Cloud Config等。 4. **Netty**: Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可...