文章摘要: 提供了一系列元注解(meta-annotations)。
介绍
简要说明
- 提供了一系列元注解(meta-annotations)。
- 这些注解用于标注代码,以便于在运行时或编译时提供额外的信息或行为。
- 这些注解通常用于声明资源的依赖、安全约束、事务属性等。
主要功能
- 资源管理:例如
@Resource注解用于注入外部资源,如数据库连接或 JMS 队列。 - 事务管理:
@Transactional注解用于声明方法或类的事务属性。 - 安全性:如
@RolesAllowed注解用于声明访问控制,指定哪些角色可以访问被注解的方法或类。 - 依赖注入:
@PostConstruct和@PreDestroy注解用于声明初始化和销毁回调方法。 - 其他:包括
@Generated(标记自动生成的代码)、@Priority(定义注解的优先级)等。
注意事项
- 不包含在 Java SE:
javax.annotation包是 Java EE 的一部分,不是 Java SE 的标准库。在纯 Java SE 环境中使用时,可能需要额外添加依赖。 - 替代方案:随着 Java 的演变,一些注解已经有了替代方案,例如在 Spring 框架中,
@Resource可以被@Autowired替代。 - 版本兼容性:不同的 Java EE 版本可能包含不同版本的
javax.annotation,需要注意兼容性问题。
适用场景
- Java EE 应用:在 Java EE 环境(如 GlassFish、WildFly 等)中,
javax.annotation中的注解用于声明企业级特性。 - Spring 应用:尽管 Spring 提供了自己的注解,但它也支持
javax.annotation中的某些注解,尤其是在集成 Java EE 和 Spring 的应用中。 - 代码生成:
@Generated注解用于标记由工具或框架自动生成的代码,有助于开发者识别和维护代码。
主要注解
2.1 @Generated
- 用于标记由工具、生成器或其他自动化手段生成的代码。
2.2 @PostConstruct
- 标记一个初始化方法,该方法在依赖注入完成后将被调用,用于执行任何必要的初始化。
2.3 @PreDestroy
- 标记一个销毁方法,该方法在容器关闭之前被调用,用于执行清理操作。
2.4 @Resource
- 用于自动注入资源,如数据源、JMS 队列等。
2.5 @Resources
- 用于自动注入多个资源。
2.6 @Singleton
- 表示一个类应该被视为单例,通常用于 EJB 中。
2.7 @RolesAllowed
- 用于声明哪些安全角色可以访问被注解的方法或类。
2.8 @RunAs
- 用于指定一个安全角色,用于执行被注解的类。
2.9 @PermitAll
- 允许所有角色访问被注解的方法或类。
2.10 @DenyAll
- 禁止所有角色访问被注解的方法或类。
2.11 @DeclareRoles
- 用于声明应用程序定义的安全角色。
2.12 @ManagedObject
- 标记一个类作为受管理对象,通常用于 JMX。
2.13 @Priority
- 用于指定注解类型的优先级。
使用场景
- 使用
@PostConstruct和@PreDestroy注解进行生命周期管理。 - 使用
@Resource注解进行依赖注入。 - 使用
@RolesAllowed等安全注解进行方法级别的安全控制。 - 使用
@Generated标记自动生成的代码,以便开发者知道哪些代码是自动生成的。
示例代码
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.annotation.security.RolesAllowed;
public class AnnotationExample {
@Resource(name = "dataSource")
private javax.sql.DataSource dataSource;
@PostConstruct
public void init() {
// 初始化方法,在依赖注入完成后被调用
}
@PreDestroy
public void cleanup() {
// 清理方法,在容器关闭之前被调用
}
@RolesAllowed("admin")
public void secureMethod() {
// 只有具有 "admin" 角色的用户可以访问此方法
}
}
总结
javax.annotation 包提供了丰富的注解,用于代码的元数据标记,有助于实现依赖注入、生命周期管理、安全控制等功能。这些注解是 Java 企业版开发的重要组成部分,理解并正确使用它们对于编写清晰、可维护的企业级应用程序至关重要。随着 Java 的演进,一些注解可能被新的 API 或规范所取代,因此开发者应关注最新的 Java 规范更新。
javax.annotation.processing
用于声明注释处理器和允许注释处理器与注释处理工具环境通信的工具。