当前位置: 首页 > article >正文

spring的核心配置

Spring框架的核心配置主要包括以下几个方面:

依赖注入(Dependency Injection, DI)

依赖注入是Spring的核心特性之一,它通过将依赖(如对象、服务等)注入到组件中,实现了组件间的松耦合。

常见的依赖注入方式:

  1. 构造器注入(Constructor Injection)

    java复制

    public class Car {
        private Engine engine;
        
        public Car(Engine engine) {
            this.engine = engine;
        }
    }

    在Spring配置文件中:

    xml复制

    <bean id="engine" class="com.example.Engine"/>
    <bean id="car" class="com.example.Car">
        <constructor-arg ref="engine"/>
    </bean>
  2. Setter注入(Setter Injection)

    java复制

    public class Car {
        private Engine engine;
        
        public void setEngine(Engine engine) {
            this.engine = engine;
        }
    }

    在Spring配置文件中:

    xml复制

    <bean id="engine" class="com.example.Engine"/>
    <bean id="car" class="com.example.Car">
        <property name="engine" ref="engine"/>
    </bean>
  3. 字段注入(Field Injection)

    java复制

    public class Car {
        @Autowired
        private Engine engine;
    }

    此方式不推荐用于核心组件,因为它会破坏测试和代码的可读性。

基于XML的配置

这是Spring最传统的配置方式,通过XML文件定义Bean和其他配置。

xml复制

<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 -->
    <bean id="userService" class="com.example.UserService"/>

    <!-- 定义另一个Bean,并注入依赖 -->
    <bean id="userController" class="com.example.UserController">
        <property name="userService" ref="userService"/>
    </bean>
</beans>

基于注解的配置

这是一个更现代的方式,通过Java注解(如@Component, @Service, @Repository, @Autowired等)来定义和配置Bean。

java复制

// 使用@Component注解定义一个Bean
@Component
public class UserService {
    // ...
}

// 使用@Autowired注解注入依赖
@Service
public class UserController {
    @Autowired
    private UserService userService;
}

在主程序或配置类中启用注解扫描:

java复制

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    // ...
}

Spring Boot的自动配置

Spring Boot通过自动配置(如@EnableAutoConfiguration)简化了Spring框架的使用。

java复制

@SpringBootApplication // 启用自动配置、组件扫描和配置文件
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

配置类(Java-Based Configuration)

通过Java类(配合@Configuration注解)来配置Bean,这是一种类型安全的方式。

java复制

@Configuration
public class AppConfig {
    @Bean
    public UserService userService() {
        return new UserService();
    }
    
    @Bean
    public UserController userController(UserService userService) {
        UserController controller = new UserController();
        controller.setUserService(userService);
        return controller;
    }
}

配置文件(如application.propertiesapplication.yml

用于存储应用程序的配置参数,支持多种格式和环境配置。

application.properties示例:

properties复制

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret

application.yml示例:

yaml复制

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: secret

AOP(面向切面编程)

Spring支持通过AOP实现横向业务逻辑的抽取(如日志、事务等)。

定义切面:

java复制

@Aspect
@Component
public class LoggingAspect {
    @Before("execution(* com.example.*.*(..))")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("Method " + joinPoint.getSignature().getName() + " is executing.");
    }
}

事务管理

Spring支持声明式事务管理(基于注解或XML配置)。

基于注解的事务管理:

java复制

@Service
@Transactional
public class UserService {
    @Autowired
    private UserRepository userRepository;
    
    public void saveUser(User user) {
        userRepository.save(user);
    }
}

基于XML的事务管理:

xml复制

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="save*" propagation="REQUIRED"/>
        <tx:method name="update*" propagation="REQUIRED"/>
        <tx:method name="delete*" propagation="REQUIRED"/>
        <tx:method name="get*" read-only="true"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="userServicePointcut" expression="execution(* com.example.service.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="userServicePointcut"/>
</aop:config>

总结

Spring的核心配置主要围绕依赖注入、配置方式(XML、注解、Spring Boot自动配置、Java配置类)、AOP、事务管理等展开。通过合理配置,可以构建灵活、可维护的企业级应用。


http://www.kler.cn/a/552031.html

相关文章:

  • 图数据库Neo4j面试内容整理-Neo4j的性能
  • HashSet 的底层原理(简单易懂)
  • deepseek蓝耘云端智能助手:让AI成为你专属的智慧助理
  • Git 使用指南:避免使用 merge 的完整流程
  • Jenkins 给任务分配 节点(Node)、设置工作空间目录
  • 大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(1)
  • 华为交换机堆叠技术简介配置
  • 生成艺术与审美图灵测试:当算法成为艺术创作者
  • 路由基础 | 路由引入实验 | 不同路由引入方式存在的问题
  • 探秘Transformer系列之(3)---数据处理
  • 力扣-二叉树-98 验证二叉搜索树
  • 【Linux】在 ubuntu 18.04 arm 容器中安装ROS环境
  • 反向代理模块kd
  • 基于ARM的人脸识别系统的研究
  • Next.js【详解】获取数据(访问接口)
  • 【基础架构篇十五】《DeepSeek权限控制:RBAC+ABAC混合鉴权模型》
  • Python 爬虫中的解析方法
  • 车载诊断数据库 --- 通用性诊断数据库ODX
  • 【嵌入式Linux应用开发基础】vfork()函数
  • IM聊天系统架构实现