
在Nest.js中使用Redis:高效缓存与数据管理
Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。Spring 的一个最大的目标就是使 JAVA EE 开发更加容易。它通过提供一个统一的、高效的方式来构造整个应用,可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。可以说,Spring 是一个提供了更完善开发环境的框架,可以为 POJO (Plain Ordinary Java Object) 对象提供企业级的服务。
Spring5.x 版本中 Web 模块的 Portlet 组件已经被废弃掉,同时增加了用于异步响应式处理的 WebFlux 组件。
Spring 团队提倡测试驱动开发(TDD)。有了控制反转 (IoC)的帮助,单元测试和集成测试变得更简单。Spring 的测试模块对 JUnit、TestNG、Mockito、PowerMock 等常用测试框架有良好的支持,并且提供了模拟 Http 请求等基于 Spring 的测试功能。
Spring 框架的核心模块,主要提供 IoC 依赖注入功能的支持,由 Beans 模块、Core 核心模块、Context 上下文模块和 SpEL 表达式语言模块组成。没有这些核心容器,也就不可能有 AOP、Web 等上层的功能。
这些模块提供了面向切面编程、与 AspectJ 的集成支持、为 JVM 添加代理的功能、基础的报文传送应用支持等。
这些模块提供了对数据库访问的抽象、编程和声明式事务管理、对 ORM 框架的支持、OXM 支持、JMS 支持等。
提供了基本的 Web 开发集成特性、Spring MVC Web 框架实现、WebSocket 支持、WebFlux 支持等。
Spring 包含多个功能模块,其中最重要的是 Spring-Core 模块,其他模块如 Spring MVC 的功能实现基本都依赖于该模块。Spring MVC 是 Spring 中的一个重要模块,主要赋予快速构建 MVC 架构的能力。Spring Boot 旨在简化 Spring 开发,减少配置文件,实现开箱即用。
案例源码点击 这里。
8
8
5.3.37
1.9.6
org.springframework
spring-context
${spring.version}
org.springframework
spring-core
${spring.version}
org.springframework
spring-beans
${spring.version}
org.aspectj
aspectjweaver
${aspectjweaver.version}
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class UserDaoImpl{
public List findUserList() {
return Collections.singletonList(new User("seven", 18));
}
}
public class UserServiceImpl {
private UserDaoImpl userDao;
public void setUserDao(UserDaoImpl userDao) {
this.userDao = userDao;
}
public List findUserList() {
return userDao.findUserList();
}
}
@Aspect
public class LogAspect {
@Around("execution(* com.seven.springhelloworldxml.service.*.*(..))")
public Object businessService(ProceedingJoinPoint pjp) throws Throwable {
Method method = ((MethodSignature) pjp.getSignature()).getMethod();
System.out.println("execute method: " + method.getName());
return pjp.proceed();
}
}
public class APP {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("aspects.xml", "spring.xml");
UserServiceImpl service = context.getBean("userService", UserServiceImpl.class);
List userList = service.findUserList();
userList.forEach(a -> System.out.println(a.getName() + "," + a.getAge()));
}
}
运行结果:
控制反转是一种设计思想,Spring 通过 IoC 容器来实现这一特性。用户不再需要手动创建对象,而是由 Spring 框架负责管理对象的创建和生命周期。这不仅提高了代码的可维护性,还使得组件之间的依赖关系变得更加清晰。
AOP 的核心思想是将业务逻辑与系统服务逻辑分开,通过定义切面来实现解耦。Spring 的 AOP 模块通过动态代理技术在运行时将切面逻辑织入到目标对象中,从而实现日志记录、事务管理等功能的非侵入式集成。
在传统的 Spring 配置中,XML 被广泛用于定义 Bean 和其依赖关系。然而,XML 配置容易变得冗长和难以维护。Java 配置通过注解和 Java 类来替代 XML 配置,使得配置更加直观和易于管理。
@EnableAspectJAutoProxy
@Configuration
public class BeansConfig {
@Bean("userDao")
public UserDaoImpl userDao() {
return new UserDaoImpl();
}
@Bean("userService")
public UserServiceImpl userService() {
UserServiceImpl userService = new UserServiceImpl();
userService.setUserDao(userDao());
return userService;
}
@Bean("logAspect")
public LogAspect logAspect() {
return new LogAspect();
}
}
随着 Java 5 引入注解,Spring 从 2.5 版本开始支持基于注解的配置。通过注解,开发者可以简化 Bean 的定义和依赖注入过程。
@Service
public class UserServiceImpl {
@Autowired
private UserDaoImpl userDao;
public List findUserList() {
return userDao.findUserList();
}
}
Spring Boot 通过约定大于配置的理念,进一步简化了 Spring 应用的开发。它提供了一系列的 starter 包,帮助开发者快速搭建项目。
问:Spring 框架的主要特点是什么?
问:如何使用 Spring 进行依赖注入?
问:什么是 Spring Boot?
问:Spring AOP 是如何工作的?
问:Spring MVC 和 Spring Boot 有什么区别?