1. 核心容器(Core Container)
-
Beans:
- 例子:你可以创建一个简单的Java对象
UserService
,并让Spring管理它的生命周期。在Spring中,可以将UserService
定义为一个Bean,Spring会根据配置自动实例化这个对象,并在需要时将其注入到其他对象中。
@Component public class UserService { public void createUser() { // 业务逻辑 } }
- 例子:你可以创建一个简单的Java对象
-
Core:
- 例子:Spring的核心功能之一是依赖注入。假设有一个
OrderService
依赖于UserService
,Spring会自动注入UserService
到OrderService
中。
@Service public class OrderService { private final UserService userService; @Autowired public OrderService(UserService userService) { this.userService = userService; } public void processOrder() { userService.createUser(); // 处理订单的逻辑 } }
- 例子:Spring的核心功能之一是依赖注入。假设有一个
-
Context:
- 例子:
ApplicationContext
是Spring的一个核心容器类,通常用来启动Spring应用并获取Bean。例如:
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); UserService userService = context.getBean(UserService.class); userService.createUser();
- 例子:
-
Expression:
- 例子:使用Spring表达式语言(SpEL)来在配置文件中动态设置属性值,例如:
<bean id="discountService" class="com.example.DiscountService"> <property name="discountRate" value="#{20 - 5}"/> </bean>
2. 数据访问/集成(Data Access/Integration)
-
JDBC:
- 例子:Spring提供了
JdbcTemplate
来简化JDBC操作。你可以使用JdbcTemplate
来执行数据库查询,而不必编写大量的样板代码。
@Repository public class UserDao { private final JdbcTemplate jdbcTemplate; @Autowired public UserDao(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public User findUserById(Long id) { return jdbcTemplate.queryForObject("SELECT * FROM users WHERE id = ?", new Object[]{id}, new BeanPropertyRowMapper<>(User.class)); } }
- 例子:Spring提供了
-
ORM:
- 例子:使用Spring Data JPA来简化数据库访问。通过定义一个接口,Spring会自动为你生成实现:
@Repository public interface UserRepository extends JpaRepository<User, Long> { User findByUsername(String username); }
-
OXM:
- 例子:使用Spring的OXM模块将Java对象转换为XML,或将XML转换为Java对象。例如,将一个
User
对象转换为XML:
@XmlRootElement public class User { private Long id; private String name; // getters and setters }
- 例子:使用Spring的OXM模块将Java对象转换为XML,或将XML转换为Java对象。例如,将一个
-
JMS:
- 例子:使用Spring集成JMS来发送和接收消息。例如,你可以配置一个JMS模板来发送消息到消息队列中:
@Service public class JmsSender { private final JmsTemplate jmsTemplate; @Autowired public JmsSender(JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate; } public void sendMessage(String destination, String message) { jmsTemplate.convertAndSend(destination, message); } }
-
Transactions(事务管理):
- 例子:Spring支持声明式事务管理,你可以使用
@Transactional
注解来自动管理事务。例如,在一个服务方法中,如果方法抛出异常,Spring会自动回滚事务。
@Service public class PaymentService { @Transactional public void processPayment(Order order) { // 执行付款逻辑 // 如果发生错误,事务将自动回滚 } }
- 例子:Spring支持声明式事务管理,你可以使用
3. Web模块
-
WebSocket:
- 例子:使用Spring支持WebSocket来实现实时通信。例如,你可以创建一个简单的WebSocket控制器:
@Component @ServerEndpoint("/chat") public class ChatEndpoint { @OnMessage public void handleMessage(String message, Session session) { session.getBasicRemote().sendText("Received: " + message); } }
-
WebMVC:
- 例子:Spring MVC用于构建基于MVC架构的Web应用。例如,创建一个简单的控制器来处理HTTP请求:
@Controller public class HomeController { @GetMapping("/") public String home(Model model) { model.addAttribute("message", "欢迎使用Spring MVC"); return "home"; } }
-
Web:
- 例子:Spring提供的基础Web集成功能,如处理文件上传。你可以配置一个文件上传控制器:
@Controller public class FileUploadController { @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { // 处理文件上传 return "uploadSuccess"; } }
-
WebFlux:
- 例子:Spring WebFlux支持响应式编程,例如创建一个反应式的REST控制器:
@RestController @RequestMapping("/reactive") public class ReactiveController { @GetMapping("/hello") public Mono<String> sayHello() { return Mono.just("Hello, WebFlux!"); } }
4. AOP(面向切面编程)
-
Aspects:
- 例子:使用AOP来记录方法调用的日志,你可以定义一个切面来记录所有服务方法的执行时间:
@Aspect @Component public class LoggingAspect { @Around("execution(* com.example.service.*.*(..))") public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { long start = System.currentTimeMillis(); Object proceed = joinPoint.proceed(); long executionTime = System.currentTimeMillis() - start; System.out.println(joinPoint.getSignature() + " executed in " + executionTime + "ms"); return proceed; } }
-
Instrumentation:
- 例子:Spring的Instrumentation模块可以在运行时动态地为类添加功能,通常用于性能监控和AOP场景。例如,你可以使用它来代理一个Bean:
InstrumentationLoadTimeWeaver weaver = new InstrumentationLoadTimeWeaver(); ProxyFactory factory = new ProxyFactory(); factory.setTarget(new UserService()); factory.addAdvice(new LoggingAspect()); UserService proxy = (UserService) factory.getProxy();
-
Messaging:
- 例子:使用Spring的消息模块来处理消息驱动的应用程序。例如,接收来自消息队列的消息并进行处理:
@Service public class MessageReceiver { @JmsListener(destination = "order-queue") public void receiveMessage(String order) { System.out.println("Received order: " + order); // 处理订单 } }
5. 测试模块
- Test:
- 例子:使用Spring提供的测试模块进行单元测试。Spring支持JUnit,你可以用
@SpringBootTest
注解来加载Spring上下文进行测试:
@SpringBootTest public class UserServiceTest { @Autowired private UserService userService; @Test public void testCreateUser() { userService.createUser(); // 断言或验证逻辑 } }
- 例子:使用Spring提供的测试模块进行单元测试。Spring支持JUnit,你可以用