Spring框架结构:
Spring容器结构:
Spring Core Container:Spring核心容器
Core:主要包含Spring框架的核心工具类,Spring的其他组件都要用到这个包里的类,Core组件是其他组件的基本核心
Beans:核心是BeanFactory接口,是管理Bean的核心组件
Context:核心是ApplicationContext接口,是对BeanFactory接口的拓展组件
SpEL:即Spring Expression Language,Spring的表达式语言组件
Spring Data Access/Integration:持久层核心模块
JDBC :即Java Database Connectivity,Java数据库连接组件,此组件消除冗长的JDBC编码和解析厂商特有的错误代码,包含Spring对JDBC封装的所有类
ORM:即Object Relational Mapping,对象关系映射组件,此组件为JPA、JDO、Hibernate、MyBatis 等框架,提供了一个交互层
OXM:即Object XML Mapping,对象XML映射组件
JMS:即Java Messaging Service,Java消息服务组件
Transactions:事务组件,支持编程式和声明式事务管理,这些事务类必须实现特定的接口,并且对所有的POJO都适用
Spring Web:
WebSocket:
Servlet:
Web:
Portlet:
Spring AOP:
Spring Aspects:
Spring Instrumentation:
Spring Messaging:
BeanFactory和ApplicationContext的关键区别:前者是懒汉式加载,后者是饿汉式加载且可以指定为懒汉式加载
示例:
public class User {
private String name;
private Integer age;
public User() {
System.out.println("user was instantiated");
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.demo.Test.User"></bean>
</beans>
public static void main(String[] args) {
//演示BeanFactory懒汉式
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
new XmlBeanDefinitionReader(beanFactory).loadBeanDefinitions(new ClassPathResource("beans.xml"));
System.out.println("容器已启动===>开始调用===>");
System.out.println(beanFactory.getBean("user"));
//结果
//容器已启动===>开始调用===>
//user was instantiated
//com.demo.Test.User@4f7d0008
//调用时才实例化,懒汉式
}
public static void main(String[] args) {
//演示ApplicationContext饿汉式
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
System.out.println("容器已启动===>开始调用===>");
System.out.println(applicationContext.getBean("user"));
//结果
//user was instantiated
//容器已启动===>开始调用===>
//com.demo.Test.User@c81cdd1
//调用前已实例化,饿汉式
}