1.Spring
Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,
它主要是为了解决企业应用开发的复杂性而诞生的:
目的:解决企业级应用开发的复杂性。
功能:使用基本的JavaBean代替EJB。
2.它具备以下优点
spring中避免了关键字new造成的耦合问题。
spring本身就是一个工厂,不需要再编写工厂类了。
spring不需要进行明确的引用关系的传递,直接通过配置完成
所有框架几乎都可以在spring中整合在一起使用。
spring编程=factory设计模式+proxy设计模式
3.spring的工作原理
spring 是按照设计模式精心打造的,它实现了工厂模式的工厂类,这个类名为BeanFactory(接口),在程序中通常使用它的子类ApplicationContext(也是接口)。
spring的核心是IOC(反转控制)容器,IOC也是一种编程思想,用于实现模块之间的解耦,在Spring中它的作用是对对象的创建,维护和销毁等生命周期的控制。IOC:把对象的创建、初始化、销毁交给spring来管理,而不是由开发者控制,实现控制反转。
spring是一个大的工厂类,spring的特点就是基于配置,在其配置文件中通过元素来创建实例对象。
4.spring有三种注入方式
1)使用有参构造方法注入
public class User{
private String name;
public User(String name){
this.name=name;
}
}
User user=new User("tom");
2)使用属性注入
通过属性的set方法进行注入。
public class User{
private String name;
public void setName(String name){
this.name=name;
}
}
User user=new User();
user.setName("jack");
3) 使用接口注入
将调用类所有依赖注入的方法抽取到接口中,调用类通过实现该接口提供相应的注入方法。
public interface Dao{
public void delete(String name);
}
public class DapIml implements Dao{
private String name;
public void delete(String name){
this.name=name;
}
}
4)通过容器完成依赖关系的注入
5.注解方式
1)@Component 为通用注解
2)@Repository 为持久层组件注解
3)@Service 为业务层组件注解
4)@Controller 为控制层注解
5)@Scope 为Bean的作用域注解
6)@Autowired 为指定Bean之间依赖关系的注解
7)@Inject 为指定Bean之间依赖关系的注解
8)@Value 为注入Spring表达式值的注解
9)@ResponseBody 为Ajax返回类型的注解
6.spring功能的作用
IOC :控制反转(获取方式发生反转,由最初new方式创建, 转为由框架创建、注入,这样可以降低对象之间的耦合度。)
AOP:面向切编程(是一种编程思想,将系统中非核心的业务提取出来,进行单独处理)
WebMVC :MVC结构的实现、与其他 Web技术整合(m模型v视图c控制)
DAO:与 JDBC整合和事务管理 (整合JDBC提供了封装,简化了DAO组件的编写)
ORM :与 ORM 框架整合
7.Spring的Bean有以下五种作用域
(1)singleton: SpringIoc容器只会创建该Bean的唯一实例;
(2)prototype: 每次请求都创建一个实例;
(3)request: 每次HTTP请求都会产生一个新的bean。
(4)session : 每次会话创建一个实例;
(5)global session : 全局的HttpSession中,容器会返回该bean的同一个实例。
8.Spring接口
Spring设计了一个Resource接口,为应用提供了更强的访问底层资源的能力,该接口拥有对应不同资源类型的实现类。
Resource接口的主要方法
boolean exists():资源是否存在
boolean isOpen():资源是否打开
URL getURL():返回对应资源的URL
File getFile():返回对应的文件对象
InputStream getInputStream():返回对应资源的输入流
Resource在Spring框架中起着不可或缺的作用,Spring框架使用Resource装载各种资源,包括配置文件资源,国际化属性资源等。
Resource接口的具体实现类
ByteArrayResource:二进制数组表示的资源。
ClassPathResource:类路径下的资源 ,资源以相对于类路径的 方式表示
FileSystemResource:文件系统资源,资源以文件系统路径方式表示,如d:/a/b.txt
InputStreamResource:对应一个InputStream的资源
ServletContextResource: 为访问容器上下文中的资源而设计的类。负责以相对于web应用根目录的路径加载资源。
UrlResource: 封装了java.net.URL。用户能够访问任何可以通过URL表示的资源,如Http资源,Ftp资源等。
9.Spring框架按其所属功能可以划分为五个主要模块
-核心模块(Core Container)
Spring的核心模块实现了IoC的功能,它将类和类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述。 由IoC容器负责类的创建,管理,获取等。BeanFactory接口是Spring框架的核心接口,实现了容器很多核心的功能。
Context模块构建于核心模块之上,扩展了BeanFactory的功能,包括国际化,资源加载,邮件服务,任务调度等多项功能。ApplicationContext是Context模块的核心接口。
表达式语言(Expression Language)是统一表达式语言(EL)的一个扩展,支持设置和获取对象属性,调用对象方法,操作数组、集合等。使用它可以很方便的通过表达式和Spring IoC容器进行交互。
-AOP模块
Spring AOP模块提供了满足AOP Alliance规范的实现,还整合了AspectJ这种AOP语言级的框架。通过AOP能降低耦合。
-数据访问集成模块(Data Access/Integration )
该模块包括了JDBC、ORM、OXM、JMS和事务管理
事务模块:该模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明性的事务管理。
JDBC模块:提供了一个JBDC的样例模板,使用这些模板能消除传统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。
ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括Hibernate、JPA、MyBatis等。而且可以使用Spring事务管理,无需额外控制事务。
OXM模块:提供了一个对Object/XML映射实现,将java对象映射成XML数据,或者将XML数据映射成java对象,Object/XML映射实现包括JAXB、Castor、XMLBeans和XStream。
JMS模块:用于JMS(Java Messaging Service),提供一套 “消息生产者、消息消费者”模板用于更加简单的使用JMS,JMS用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
-Web模块
该模块建立在AoolicationContext模块之上,提供了Web应用的功能。如文件上传、FreeMarker等。
Spring可以整合Struts2等MVC框架。Spring自己提供了MVC框架Spring MVC。
-测试模块
Spring可以用非容器依赖的编程方式进行几乎所有的测试工作,支持JUnit和TestNG等测试框架。