
为了方便我们在日常开发中更加便捷地使用注解,本文将对各种开发所需要的注解进行统一归类,并结合实际用例进行解析,以便日后查阅和使用。
一、依赖注入相关注解
1. 组件注解:包括@Component、@Controller、@Service、@Repository等,这些注解都会将类标识为Spring的组件,使得Spring能够自动扫描并加载到IOC容器中。
@Component:通用的组件注解,其他注解如@Controller、@Service、@Repository都是@Component的特例。
@Controller:用于MVC控制层,DispatcherServlet会自动扫描并加载该注解的类。
@Service:用于业务逻辑层。
@Repository:用于数据访问层。
2. 依赖注入注解:包括@Autowired、@Inject和@Resource等,这些注解可以实现字段、方法和构造函数的自动注入。
@Autowired:默认按类型注入,可通过@Qualifier指定具体的Bean。
@Inject:作用与@Autowired相同,可标注在字段、方法和构造器上。
@Resource:默认按名称注入,可通过name属性指定名称。
二、作用域和生命周期相关注解
1. @Scope:用于定义Bean的作用域,包括singleton、prototype、session和request四种。
2. @PostConstruct和@PreDestroy:分别用于标记初始化方法和销毁方法。
三、配置注解
1. @Configuration:用于替代xml配置文件,被该注解标记的类内包含被@Bean注解的方法,这些方被Spring扫描并用于构建bean定义。
2. @SpringBootConfiguration:组合注解,包括@Configuration、@EnableAutoConfiguration和@ComponentScan。
3. 其他配置相关注解:包括@AutoConfigureAfter、@ComponentScan、@Filter等。
四、资源、值等注入注解
包括@Value、@Bean、@PropertySource、@ImportResource和@ConfigurationProperties等,这些注解主要用于资源的注入和配置。
五、条件注解@Conditional及其衍生注解
@Conditional根据特定条件创建特定的Bean,衍生出的注解包括@ConditionalOnBean、@ConditionalOnClass、@ConditionalOnExpression、@ConditionalOnJava、@ConditionalOnMissingBean、@ConditionalOnMissingClass、@ConditionalOnNotWebApplication和@ConditionalOnProperty等。这些注解可以根据不同的条件控制Bean的创建。
类加载器注解介绍:
注解可以用于指定资源文件的存在性、标注方法、类和接口等。在Spring框架中,我们可以通过注解来加载和配置bean。例如,可以使用@Profile注解来指定某个bean属于哪一个profile。还有@Configuration、@ComponentScan等注解用于配置和扫描组件。通过@ImportResource和@Import注解,我们可以导入其他的配置资源或类。
验证注解:
验证注解是Java中用于数据验证的一种机制。这些注解主要在javax.validation包下。例如,@Valid注解用于启动校验,它可以紧跟在带有该注解的参数后面。其他的验证注解如@AssertFalse、@AssertTrue、@DecimalMax、@DecimalMin、@Digits等,都是用来约束元素的值或类型。
AOP(面向切面编程)与AspectJ的注解式切面编程:
AspectJ的注解式在org.aspectj包下。例如,@Aspect注解声明一个类为切面;@After、@Before、@Around等注解是通知方法,它们会在目标方法的不同时机执行;@Pointcut能定义可重用的切点;@EnableAspectJAutoProxy开启Spring对AspectJ的支持。在编写切面时,我们可以使用execution指示器来匹配执行方法,还有其他指示器如arg()、@args()、this()、Target、@target()、within()和@within()等。
Spring MVC注解:
在Spring MVC中,有一些重要的注解用于配置URL和方法之间的映射、处理返回值等。例如,@EnableWebMvc会开启一些默认配置;@RequestMapping用来映射Web请求;@ResponseBody支持将返回值放在response体内;@RequestBody允许request的参数在request体内;@PathVariable用来接收路径参数;@RestController是@Controller和@ResponseBody的组合;@ModelAttribute用于绑定请求参数到命令对象等。Spring security中的@EnableWebSecurityConfig和@EnableGlobaleMethodSecurity是两个关键注解,用于用户的访问认证和授权。
Spring Boot注解:
Spring Boot的核心注解是@SpringBootApplication,它组合了@Configuration、@EnableAutoConfiguration和@ComponentScan,主要用于开启自动配置。而@EnableAutoConfiguration则是让Spring Boot根据依赖的jar包为当前项目进行自动配置。还有其他的Spring Boot注解如@EnableWebSecurity等。
