关于#import和@class的区别

本文详细解析了Objective-C编程语言中#import与@class的区别,包括它们在编译效率、循环依赖处理及不同文件中的使用场景等方面的具体应用。

1.import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你。

2. 在头文件中, 一般只需要知道被引用的类的名称就可以了。 不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称。 而在实现类里面,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。

3. 在编译效率方面考虑,如果你有100个头文件都#import了同一个头文件,或者这些文件是依次引用的,如A–>B, B–>C, C–>D这样的引用关系。当最开始的那个头文件有变化的话,后面所有引用它的类都需要重新编译,如果你的类有很多的话,这将耗费大量的时间。而是用 @class则不会。

4.如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。

所以,一般来说,@class是放在interface中的,只是为了在interface中引用这个类,把这个类作为一个类型来用的。 在实现这个接口的实现类中,如果需要引用这个类的实体变量或者方法之类的,还是需要import在@class中声明的类进来.

### Java中`@Import`、`@Document`注解的作用以及`@ConditionalOnProperty`注解的功能 #### `@Import` 注解的作用 `@Import` 是 Spring 框架中的一个注解,用于将一个或多个配置类导入到当前的 Spring 应用上下文中。通过 `@Import`,可以将多个配置类集中管理,提升代码的模块化可维护性。例如,`@Import({ConfigClass1.class, ConfigClass2.class})` 可以将 `ConfigClass1` `ConfigClass2` 的 Bean 定义合并到当前的配置类中,从而避免重复定义 Bean [^4]。 #### `@Document` 注解的作用 `@Document` 是 Spring Data Elasticsearch 中的一个注解,用于标识一个类是 Elasticsearch 的文档类型,并通过 `indexName` `type` 属性定义其在 Elasticsearch 中的索引名称类型。例如,`@Document(indexName = "articles", type = "article")` 表示该类对应的 Elasticsearch 文档存储在名为 `articles` 的索引中,且类型为 `article` [^1]。 #### `@ConditionalOnProperty` 注解的功能 `@ConditionalOnProperty` 是 Spring Boot 中的一个条件注解,用于根据配置文件中的属性值决定是否加载某个 Bean 或配置类。通过 `@ConditionalOnProperty`,可以实现配置驱动的条件化 Bean 加载,从而提高应用的灵活性可配置性。例如,`@ConditionalOnProperty(name = "feature.enabled", havingValue = "true")` 表示只有在配置文件中 `feature.enabled` 的值为 `true` 时,才会加载相关的 Bean 或配置 [^4]。 ### 示例代码 以下是一个结合 `@Import`、`@Document` `@ConditionalOnProperty` 的示例代码: ```java // 示例1: @Import 的使用 @Configuration @Import({DatabaseConfig.class, ServiceConfig.class}) public class AppConfig { // AppConfig 类本身不定义任何 Bean,而是导入其他配置类 } // 示例2: @Document 的使用 @Document(indexName = "articles", type = "article") public class Article { @Id private String id; private String title; private String content; // getter setter 方法 } // 示例3: @ConditionalOnProperty 的使用 @Configuration @ConditionalOnProperty(name = "feature.enabled", havingValue = "true") public class FeatureConfig { @Bean public FeatureService featureService() { return new FeatureServiceImpl(); } } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值