什么是Spring?
Spring是一个轻量级的java开发框架,是一个分层的javaSE/JavaEE full-stack(一站式)轻量级的开源框架,为开发java应用程序提供全面的基础架构支持。
目的:为了解决企业级应用开发的复杂性,即业务逻辑层和其他各层的耦合问题,方便java开发者可以专注于应用程序的开发。
Spring总共大约有20个模块,由1300多个不同的文件构成,这些组件被分别整合以下模块中:
1. 核心容器(Core Container)
2. AOP(Aspect Oriented Programming)和设备支持(Instrumentation)
3. 数据访问与继承(Data Access/Integeration)
4. WEB
5. 消息(Messaging)
6. Test
1. Spring core:提供了框架的基本组成部分,包括控制反转(IOC)和依赖注入(DI)功能;
2. Spring beans:应用核心,提供了BeanFactory,是工厂模式的一个经典的实现,Spring将管理对象称为Bean,它使Spring成为一个容器;
3. Spring Context:构建于core封装包基础上的context分装包,提供了一种框架式对象访问方法;
4. Spring jdbc:提供了一个jdbc的抽象层,消除了繁琐的jdbc编码和数据库厂商特有的错误代码解析,用于简化jdbcl
5. Spring aop:提供了面向切面的编程实现,让你可以自定义拦截器,切点等;
6. Spring Webb:提供了针对Web开发的集成特性,例如文件上传,利用servlet listeners进行ioc容器的初始化和针对web的applicationContext。
7. Spring test:主要是为测试提供支持,支持使用JUnit或者testng对spring组件进行单元测试和集成测试。
Spring框架中用到了哪些设计模式?
1. 工厂模式:BeanFactory是简单的工厂模式的体现,用来创建对象的实例;
2. 单例模式:Bean默认为单例模式;
3. 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;
4. 模版方法:用来解决代码重复的问题,比如在RestTemplate,JmsTemplate,JpaTemplate。
5. 观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现--applicationListener。
Spring的核心?
Spring框架的核心:IOC容器,AOP模块。
Spring通过IOC容器管理POJO对象以及它们之间的耦合关系,IOC容器让相互协助的组件保持松散的耦合;
Spring通过AOP以动态非侵入的方式增强服务,AOP编程允许把遍布应用各层的功能分离出来形成可以重用的组件,例如监控异常,登陆拦截等
Spring的优缺点是什么?
优点:
- 方便解耦,简化开发:Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护,交给Spring管理
- 提供AOP(面向切面)编程支持:例如登陆拦截,监控异常等
- 声明式事务的支持:只需要通过配置就可以完成对事务的管理,无需手动编程
- 方便程序测试:提供了JUnit4支持,可以通过注解方便的测试程序
- 方便集成各种优秀框架:Spring不排斥各种优秀开源框架,其内部提供了对各种优秀框架的直接支持,例如:Struts,Hibernate,MyBatics等
- 降低JavaEE API的使用难度:Spring对JavaEE开发中非常难用的一些API(jdbc,JavaMail,远程调用等)提供了封装,,使这些API应用难度大大降低。
缺点:
- Spring是一个很轻量级的框架,给人的感觉大而全
- Spring依赖反射,反射影响性能
- 使用门槛太高,入门Spring需要很长时间适应