SSM中组件的配置方法总结,为什么有些需要加@Bean而有些需要实现接口并重写?
一、通过配置类完成配置方法
为什么有些组件的配置需要加@Bean而有些需要实现接口并重写?
1、 目的不同
- @Bean注解的目标是创建和配置服务实例,主要关注的是对象的初始化过程、依赖的注入等,是实现依赖注入和反转的基础。
- 实现接口并重写更多是为了拓展框架的功能行为,比如通过重写WebMvcConfigurer的方法来制定SpringMvc的行为,关注的是框架层面的配置和扩展,而不是单个@Bean的创建。
2、 作用范围不同
- @Bean定义的组件是具体的对象实例,是Spring中容器中的Bean,用于构成应用的业务逻辑和服务层。
- 接口重写通常用于框架层面的配置,影响的是整个应用的处理流程和运行模式,比如全局的拦截器配置、视图配置等。
适用场景
1、@Bean
当你需要向Spring容器注册一个特定的实例,并且需要特定的初始化逻辑、依赖关系其他@Bean作为依赖时,就可以使用@Bean。例如配置数据源、事务管理器、Mybatis的sqlSessionFactory等、AOP中定义切面逻辑。
2、实现接口并重写
当你需要改变或扩展框架默认行为但又不想或不能改变框架源码时,可以使用此方法,例如自定义Spring Mvc的拦截器、视图解析器、AOP中定义切面逻辑。
这里可能会有所疑问,AOP不是也可以通过注解实现么?
确实,AOP组件的配置方式确实与众不同,它不但可以通过实现接口重写方法实现,也可以通过注解实现。
aop的两种配置方式
二、SSM组件的其他配置方法
1、基于注解的配置
- Component Scanning(组件扫描)
通过在配置类上使用@ComponentScan注解,Spring会自动扫描指定包路径下带有@Component、@Service、@Repository、@Controller等注解的类,并将其注册到IOC容器。 - Stereotype Annotations(注解角色)
如上所述@Component、@Service、@Repository、@Controller这些注解不仅标记类的角色,还隐含自动注册的功能,减少配置文件的编写。
2、基于xml配置
- 虽然随着Java配置的普及,XML配置的使用有所减少,但在某些场景下,如第三方库的集成或遗留系统的维护,仍然会使用XML来定义Bean和配置信息。Spring支持混合使用XML和Java配置,通过@ImportResource注解可以导入XML配置文件。
3、多环境配置
- 不管是Java配置还是XML配置,Spring都支持通过profiles来实现多环境配置。可以根据不同的环境(如开发、测试、生产)加载不同的配置,这可以通过在配置文件中使用spring.profiles.active属性或在Java配置中使用@Profile注解来实现。
4、PropertySource和Environment(属性源与环境)
- Spring支持从多种来源(如properties文件、系统环境变量、命令行参数等)读取配置属性,并通过@Value注解或Environment接口在代码中使用这些属性,增加了配置的灵活性和可外部化管理的能力。
5、自动配置与Spring Boot(不属于SSM范围)
- 虽然不属于SSM范围,但也属于组件配置,在此稍微提一下。
Spring Boot框架进一步简化了配置,通过自动配置(Auto-configuration)和starter依赖,大量常用配置已经预设好,开发者只需少量或零配置即可启动应用。Spring Boot应用通常结合Java配置和application.properties/yaml文件进行配置。