Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。
Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置
主要由以下几个模块组成(可参考jar包):
Spring Core:核心类库,提供IOC服务;
Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等);
Spring AOP:AOP服务;
Spring DAO:对JDBC的抽象,简化了数据访问异常的处理;
Spring ORM:对现有的ORM框架的支持;
Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传;
Spring MVC:提供面向Web应用的Model-View-Controller实现
AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程
AOP其实只是OOP的补充而已
AOP在编程历史上可以说是里程碑式的,对OOP(面向对象)编程是一种十分有益的补充
IoC不是什么技术,而是一种设计思想。在java的开发过程中。ioc意味着将你设计好的对象交给容器控制,而不是传统的在对象内部直接控制。理解“谁控制谁,控制什么
为何是反转,哪些反转了:有反转就有正转,传统的应用程序是由我们在对象中主动控制去直接获取依赖对象,也就是正转;反转就是由容器帮我们创建以及注入依赖对象;为何是反转,因为是由容器帮我们查找及注入对象,对象只是被动的接受;
IOC是一种设计思想(思想的转变),之前所有创建对象的操作是由程序员自己new,现在交给了spring,由spring帮我们创建对象,注入之类的。控制反转,控制是指 ioc提供的容器控制类的对象,反转是指转交给spring来负责。最大的作用就是解耦(降低耦合性)
IOC是一种叫做“控制反转”的设计思想
1、共同点
两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法
2、不同点
(1)@Autowired
@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。
@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。
(2)@Resource
@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略
@Component:是一个标识类是IOC容器的一个组件确保被扫描器识别,注入进来
@Repossitory:声明dao层
@Lazy(value=true) :延迟加载
@Configuration:起到配置定义的作用,细节就是@Bean创建了JavaBean的细节信息
@ComponentScan(basePackages=""):扫包,也可以进行类扫描
@Scope(scopeName=“singleton”):单例
@Scope(scopeName=“prototype”):多例
@Service:声明业务类
@Autowrite:反射注入,如果找不到符合的JavaBean对象时,控制台会出现NoSuchBeanDefinitionException
@Primary:当Spring不知道具体注入那个实现类对象,使用这个设置优先级
@Qualifier:给service主键设置一个别名,注入指定别名的主键,适用于1个接口多个实现类
@Resource官方:可以使用byName或byType形式进行注入
@ImportResource(value=“ac.xml”):在Java类中导入xml文件中的配置
1.工厂设计模式:Spring使用工厂模式通过BeanFactory和ApplicationContext创建bean对象。
2.代理设计模式:Spring AOP功能的实现。
3.单例设计模式:Spring中的bean默认都是单例的。
4.模板方法模式:Spring中的jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到了模板模式。
5.包装器设计模式:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
6.观察者模式:Spring事件驱动模型就是观察者模式很经典的一个应用。
7.适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式、Spring MVC中也是用到了适配器模式适配Controller。
编程式事务管理:这意味着你可以通过编程的方式管理事务,这种方式带来了很大的灵活性,但很难维护。
声明式事务管理:这种方式意味着你可以将事务管理和业务代码分离。你只需要通过注解或者XML配置管理事务
**Spring工作原理
Spring 已经用过一段时间了,感觉Spring是个很不错的框架。内部最核心的就是IOC了,
动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射 ,反射其实就是在运行时动态的去创建、调用对
象,Spring就是在运行时,跟xml Spring的配置 文件来动态的创建对象,和调用对象里的方法的 。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明 管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
Spring里用的最经典的一个设计模式就是:模板方法模式
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。**
目的
解决企业应用开发的复杂性
功能
使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
一句话 什么是Spring
Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Java应用程序中,但对Java EE平台上的Web应用程序有更好的扩展性,
Spring框架的目标是使得Java EE应用程序的开发更加简捷,通过使用POJO为基础的编程模型促进良好的编程风格
(POJO即简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称)