Spring FrameWork,这个名字本身就充满了生机与活力,仿佛春天的气息扑面而来。
它是Java开发Web服务不二之选,为企业级应用开发带来了革命性的变革。在庞大的Java生态系统中,Spring框架犹如一位智者,默默地支撑着无数的应用程序,让它们在高效、稳定的同时,也变得无比优雅。
想象一下,你正在开发一款复杂的企业级应用,面对各种繁杂的业务逻辑和数据处理,你可能会感到有些力不从心。但有了Spring,一切都变得井然有序。
它不仅提供了丰富的功能,如依赖注入、面向切面编程、事务管理等,还让你的代码更加清晰、简洁,让开发变得更加高效。
既然Spring框架如此重要,那他的核心接口也一定有其设计的奥妙之处,本文整理了我认为Spring框架最重要的五个接口。
每个接口都能做自定义扩展,借助Spring的扩展能力能你可以实现很多好用的功能。
BeanFactory
org.springframework.beans.factory.BeanFactory是Spring框架的核心接口之一,它定义了一个简单的工厂接口,用于获取Bean的实例。
在Spring中,BeanFactory负责初始化、配置和管理Bean的生命周期,并且提供了Bean的自动装配功能。
BeanFactory接口定义了几个关键的方法,其中最重要的是getBean()方法,该方法返回指定名称的Bean实例。如果Bean已经存在,则直接返回;否则,BeanFactory会根据配置信息创建一个新的Bean实例。
此外,BeanFactory还提供了其他一些方法,例如containsBean()和isSingleton()等,用于查询和管理Bean的状态。
// User类
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
// UserService类
public class UserService {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
// Main类
public class Main {
public static void main(String[] args) {
// 创建BeanFactory实例
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
// 注册UserService为Bean
beanFactory.registerSingleton("userService", new UserService());
// 获取UserService实例
UserService userService = (UserService) beanFactory.getBean("userService");
// 获取User实例
User user = userService.getUser();
// 打印User实例的name属性
System.out.println(user.getName());
}
}
在上面的示例中,我们首先创建了两个类:User和UserService。
然后在Main类中创建了一个DefaultListableBeanFactory实例,并注册了UserService为Bean。
通过调用getBean()方法获取UserService的实例,并通过getUser()方法获取User实例,最后打印出User实例的name属性。
在这个过程中,BeanFactory负责管理和初始化Bean,而不需要我们在代码中显式地创建和管理Bean的实例。
需要注意的是,BeanFactory是一种轻量级的容器,它不支持复杂的Bean配置,如依赖注入等。对于更复杂的需求,建议使用ApplicationContext接口。
ApplicationContext
org.springframework.context.ApplicationContext是Spring 框架的一个高级接口,继承自 EnvironmentCapable、ListableBeanFactory、HierarchicalMessageSource、ApplicationEventPublisher、ResourceLoader、ApplicationContextAware和SmartLifecycle 接口。
ApplicationContext虽然继承自BeanFactory,但是提供了比基础的BeanFactory更多的企业级功能,ApplictionContext提供的能力如下:
- 国际化支持:ApplicationContext 提供了一套完整的国际化支持,可以通过 MessageSource 接口获取消息资源,使得应用能够根据不同地区的文化环境显示不同的消息。
- 事件发布机制:ApplicationContext 支持事件发布机制,允许在应用中发布事件,并且可以订阅这些事件。
- 资源加载:ApplicationContext 允许通过统一的方式加载资源,如文件、URL等。
- BeanFactoryPostProcessor:允许在BeanFactory初始化后,但在任何Bean实例化之前,修改BeanFactory的配置。
以下是我整理的ApplicationContext的一些Api,希望对你有帮助:
// 主要方法
- getBean(String name):根据名称获取Bean实例。
- getBean(String name, Class<T> requiredType):根据名称和类型获取Bean实例。
- containsBean(String name):检查是否存在指定名称的Bean。
- isSingleton(String name):检查指定名称的Bean是否为单例。
- getType(String name):获取指定名称的Bean的类型。
- getAliases(String name):获取指定名称的Bean的别名。
// 事件传播
- publishEvent(ApplicationEvent event):发布一个应用程序事件。
- addApplicationListener(ApplicationListener<?> listener):添加一个应用程序监听器。
- removeApplicationListener(ApplicationListener<?> listener):移除一个应用程序监听器。
- getApplicationListeners():获取所有应用程序监听器。
// 资源访问
- getResource(String path):获取指定路径的资源。
- getResourceAsStream(String path):获取指定路径的资源输入流。
- getResourceLoader():获取资源加载器对象。
// 应用程序上下文
- getApplicationName():获取应用程序名称。
- getEnvironment():获取应用程序环境信息。
- getParent():获取父应用程序上下文。
// 生命周期
- refresh():刷新应用程序上下文。
- close():关闭应用程序上下文。
DispatcherServlet
org.springframework.web.servlet.DispatcherServlet是Spring MVC框架的入口点,它是Spring MVC的核心组件之一。
每当有HTTP请求到达服务器时,DispatcherServlet就会拦截这个请求,并将其转发到相应的控制器或视图。
它充当了一个中央调度中心的角色,将请求分发到正确的处理器,并协调各个组件之间的协作。
相关源码和注释如下:
package org.springframework.web.servlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DispatcherServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取请求路径
String path = request.getPathInfo();
// 获取处理器映射
HandlerMapping handlerMapping = getHandlerMapping();
// 获取处理器
Object handler = handlerMapping.getHandler(path);
if (handler == null) {
throw new ServletException("No handler found for path: " + path);
}
// 处理请求
ModelAndView modelAndView = handleRequest(request, response, handler);
// 渲染视图
render(modelAndView, request, response);
}
protected ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 处理请求
return ((HandlerAdapter) handler).handleRequest(request, response);
}
protected void render(ModelAndView modelAndView, HttpServletRequest request, HttpServletResponse response) throws Exception {
// 渲染视图
View view = modelAndView.getView();
view.render(modelAndView.getModel(), request, response);
}
}
PlatformTransactionManager
PlatformTransactionManager是Spring框架中的事务管理接口,他是注解@Transactional的具体实现。
PlatformTransactionManager提供了事务管理的基本操作。它允许开发者控制事务的边界,执行事务性的操作,以及处理事务相关的异常。
以下是PlatformTransactionManager接口的部分源码:
package org.springframework.transaction;
public interface PlatformTransactionManager {
TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
void commit(TransactionStatus status) throws TransactionException;
void rollback(TransactionStatus status) throws TransactionException;
boolean isNewTransaction() throws TransactionException;
void setTransactionTimeout(int seconds) throws TransactionException;
int getTransactionTimeout() throws TransactionException;
}
- getTransaction(TransactionDefinition definition):获取一个新的 TransactionStatus 实例,该实例代表当前事务的状态。这个方法通常用于开始一个新的事务。
- commit(TransactionStatus status):提交事务。提交事务意味着所有在事务中所做的更改都会被持久化到数据库中。
- rollback(TransactionStatus status):回滚事务。如果在事务执行过程中出现异常,可以通过此方法撤销所有变更,使数据库状态回到事务开始之前。
- isNewTransaction():判断当前线程是否是一个新的事务。
- setTransactionTimeout(int seconds):设置事务超时时间(秒)。如果事务在这段时间内没有完成,则自动回滚。
- getTransactionTimeout():获取当前事务的超时时间(秒)。
本文暂时没有评论,来添加一个吧(●'◡'●)