1. 首页
  2. 软件开发
  3. JAVA
  4. 深入解析Spring框架关键特性

深入解析Spring框架关键特性

  • 发布于 2024-09-21
  • 0 次阅读

目录


1. Bean的生命周期与作用域管理

单例作用域Bean的生命周期

2. 外部属性配置

加载外部配置文件

3. 依赖注入(DI)

构造器注入

4. 注解驱动的开发

组件扫描

5. 整合第三方库

配置数据源

6. 与MyBatis的整合

配置SqlSessionFactory



1. Bean的生命周期与作用域管理

Spring的强大之处在于其对对象(Bean)生命周期的精细管理能力,使得资源使用更为高效。

单例作用域Bean的生命周期

在Spring中,默认的作用域是单例(singleton)。以下代码展示了如何通过注解定义一个单例作用域的Bean,并通过生命周期注解标记初始化和销毁时执行的方法。

@Repository
@Scope("singleton") // 明确标识作用域为单例
public class BookRepository {

    public BookRepository() {
        System.out.println("创建BookRepository实例");
    }

    @PostConstruct
    public void init() {
        // 初始化方法,数据库连接等操作可以在此执行
        System.out.println("BookRepository 初始化");
    }

    @PreDestroy
    public void cleanup() {
        // 清理方法,断开数据库连接等清理操作在此执行
        System.out.println("BookRepository 清理");
    }
}

2. 外部属性配置

Spring允许从外部属性文件动态加载配置,简化了代码与配置的分离,增加了应用的灵活性。

加载外部配置文件

Spring可以通过@PropertySource注解指定配置文件的位置,然后通过@Value注解将配置文件的值注入到Bean的属性中。


@Configuration
@PropertySource("classpath:config.properties") // 指定外部配置文件
public class AppConfig {

    @Value("${app.name}") // 从配置文件读取app.name属性值
    private String appName;

    @Bean
    public AppInfo appInfo() {
        AppInfo appInfo = new AppInfo();
        appInfo.setName(appName);
        return appInfo;
    }
}

3. 依赖注入(DI)

依赖注入是Spring框架的核心功能,它降低了组件间的耦合度。

构造器注入

通过构造器注入,Spring在创建Bean时自动注入必要的依赖。

@Service
public class UserService {

    private final UserRepository userRepository;

    @Autowired // 通过构造器注入UserRepository
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public void addUser(User user) {
        userRepository.save(user);
    }
}

4. 注解驱动的开发

注解简化了配置,提高了开发效率和代码的可读性。

组件扫描

Spring通过@ComponentScan注解自动寻找和注册Bean,避免了手动配置。


@Configuration
@ComponentScan(basePackages = "com.example.app") // 自动扫描com.example.app包下的@Component注解类
public class SpringConfig {
}


5. 整合第三方库

Spring的开放性允许它轻松整合第三方库,如数据库连接池、消息队列等。

配置数据源

以下示例展示了如何配置一个连接池数据源:

@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource dataSource() {
        HikariDataSource ds = new HikariDataSource();
        ds.setJdbcUrl("jdbc:mysql://localhost:3306/springdb");
        ds.setUsername("root");
        ds.setPassword("password");
        return ds;
    }
}

6. 与MyBatis的整合

Spring与MyBatis的整合为数据访问层提供了强大的支持。

配置SqlSessionFactory


@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
    SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(dataSource);
    return sessionFactory.getObject();
}





原文链接: https://blog.csdn.net/2302_80084329/article/details/142267795