Spring 配置类的分类

  • full – 完整配置类
    • 使用@Configuration注解的类
  • lite – 简化配置类
    • 没有使用@Configuration注解,但是
      • 使用了注解@Component或者注解@Component变种的类
      • 或者使用了注解@ComponentScan的类
      • 或者使用了注解@Import的类
      • 或者使用了注解@ImportResource的类
      • 或者某个配置类含有使用@Bean注解的方法的嵌套子类

      比如某个配置类(full/lite都可以)的嵌套子类自身不使用@Configuration,但含有使用@Bean注解的方法

    • 一定不会是接口

以上信息根据Spring源代码分析获得,代码可参考:

  1. ConfigurationClassUtils#isFullConfigurationCandidatefull判断实现逻辑
  2. ConfigurationClassUtils#isLiteConfigurationCandidatelite判断实现逻辑
  3. ConfigurationClassUtils#checkConfigurationClassCandidate – 以上逻辑的组合使用
  4. ConfigurationClassParser#doProcessConfigurationClass – 以上逻辑的业务应用

举例1 :

//使用注解@Configuration
@Configuration
public class MapConfig {
	// 没有使用注解@Configuration,但含有@Bean注解方法
	// 没有使用 static
    public class ModuleAConfig {
        @Bean
        Map poiLocations() {
            // ...
        }
    }

	// 没有使用注解@Configuration,但含有@Bean注解方法
	// 使用 static
    private static class ModuleBConfig {
        @Bean
        Map namedPOIs() {
            // ...
        }
    }

	//使用注解@Configuration
    @Configuration
    private static class ModuleCConfig {
        @Bean
        Map namedRegions() {
            // ...
        }
    }
}

在上面的例子中 :

  1. MapConfig是完整配置类
  2. ModuleAConfig是简化配置类
  3. ModuleBConfig简化配置类
  4. ModuleCConfig是完整配置类
### Spring框架注解分类及用途 #### 一、基础组件定义注解 为了使应用程序能够自动发现并注册组件,Spring 提供了一系列用于标记不同类型的Bean的基础注解。例如`@Component`可以用来标注任何Spring管理的组件[^1]。 - `@Repository`: 当构建数据访问层时推荐使用此注解来处理异常转换等问题。 - `@Service`: 应用于业务逻辑实现类上,表示这是一个服务层组件。 - `@Controller`: 表明该类是一个Web MVC控制器,在其中还可以进一步通过`@RequestMapping`指定请求映射规则[^4]。 #### 二、依赖注入相关注解 这些注解帮助开发者简化了传统XML方式下的属性设置过程: - `@Autowired`: 自动装配由Spring IoC容器管理和维护的对象实例之间的协作关系;它既可以在字段级别也可以在setter方法或构造函数参数处应用。 - `@Qualifier`: 和@Autowired一起工作,当存在多个相同类型的bean时可用于精确匹配特定名称的目标bean。 #### 三、配置与元数据注解 此类别中的注解主要用于替代传统的XML配置文件来进行Java代码级别的声明式编程: - `@Configuration`: 定义一个包含@Bean方法返回值作为spring上下文中beans源码形式的新配置类。 - `<content:component-scan>`标签以及对应的`@ComponentScan`注解允许我们指定期望扫描哪些包及其子包内的候选组件以便纳入到ApplicationContext中去[^2]。 - `@PropertySource`:加载.properties格式资源文件至Environment环境变量集合内方便后续获取键值对信息。 #### 四、AOP面向切面编程支持注解 利用这些工具可以让横切关注点(如日志记录、事务管理等)独立于主要功能模块之外单独开发测试部署而不必侵入原有代码结构: - `@Aspect`: 声明当前POJO为一个方面(Advice),即包含了若干个通知(advice)定义的地方。 - `@Before`, `@AfterReturning`, `@Around`, etc.: 分别对应前置增强(before advice), 后置增强(after returning advice), 环绕增强(around advice)等多种不同类型的通知机制。 #### 五、安全性控制注解 对于企业级应用而言保障信息安全至关重要,因此Spring Security提供了丰富的API接口让开发者轻松集成身份验证和授权策略: - `@EnableGlobalMethodSecurity(prePostEnabled=true)` : 开启基于表达式的权限校验特性之后就可以借助像`@PreAuthorize()`,`@PostFilter()`这样的细粒度操作限制措施保护敏感区域不受未授权访问影响[^5]。 ```java // 示例:启用全局方法安全性和预授权检查 @EnableGlobalMethodSecurity(prePostEnabled = true) public class WebSecurityConfig extends WebSecurityConfigurerAdapter { ... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值