Spring框架主要提供了ICO容器、AOP、数据访问、web开发、消息、测试等相关技术的支持。
Spring使用简单的POJO(plain old java object,即无任何限制的普通对象)来进行企业级开发。每一个被spring管理的对象都称之为Bean;而Spring提供了一个IOC容器用来初始化对象,解决对象间的依赖管理和对象的使用。
Spring框架本身有四大原则:
1:使用POJO进行轻量级和最小侵入式开发
2:通过依赖注入和基于接口编程实现松耦合
3:通过AOP和默认习惯进行声明式编程
4:减少AOP和模板(template)减少模式化代码
依赖注入:
控制反转(inversion of control-IOC)和依赖注入(dependency injection-DI)在spring环境下是等同的概念,控制反转是通过依赖注入实现的。所谓依赖注入指的是容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖。
依赖注入的主要目的是为了解耦,体现一种“组合”的理念,如果你希望你的类具备某些功能的时候,是继承自一个具有此功能的父类好呢?还是组合另外一个具体这个功能的类好呢?答案是不言而喻的,继承一个父类,子类将与父类耦合,组合另外一个类则使耦合度大大降低。
Spring IOC容器(applicationContext)负责创建Bean,并通过容器将功能类Bean注入到你需要的Bean中。Spring提供xml、注解、java配置、groovy配置实现Bean的创建和注入。
无论是xml配置、注解配置还是java配置,都被称为配置元数据,所谓元数据即描述数据的数据。元数据本身不具备任何可执行的能力,只能通过外界代码来对这些元数据行解析后进行一些有意义的操作。Spring容器解析这些配置元数据进行bean初始化、配置和管理项目依赖。
AOP:面向切面编程,相对于OOP面向对象编程。
Spring的AOP的存在目的是为了解耦。AOP可以让一组类共享相同的行为。在OOP中,只能通过继承类和实现接口,来使代码的耦合度增强,且类继承只能单继承,阻碍了更多行为添加到一组类上,AOP弥补了OOP的不足。
Spring支持AspectJ的注解式切面编程:
1:使用@Aspect声明是一个切面。
2:使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数。
3:其中@After、@Before、@Around参数的拦截规则为切点(PointCut),为了使切点复用,可使用@PointCut专门定义拦截规则,然后在@After、@Before、@Around的参数中调用。
4:其中符合条件的每一个被拦截处为连接点(JoinPoint)。
多线程的使用:
Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程。使用TheadPoolTaskExecutor可实现一个基于线程池TaskExecutor。而实际开发任务重任务一般是非阻碍的,即异步的,所以我们要在配置类中通过@EnableAsunc开启对异步任务的支持,并通过在实际中执行Bean的方法中使用@Async注解来声明其是一个异步任务。
具体使用:
https://www.cnblogs.com/shangxiaofei/p/6211367.html
定时任务(计划任务)的使用:
Spring配置文件中增加<task:annotation-driven scheduler=“”>
<task:scheduler>
然后就可以使用@Scheduled声明方法为计划任务,使用fixedRate属性每隔固定时间执行。
使用cron属性按照指定时间执行。