Java开发Spring常见注解
前言
Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。
注解本身没有功能的,就和 xml 一样。注解和 xml 都是一种元数据,元数据即解释数据的数据,这就是所谓配置。
Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大提高了开发效率。 下面按照分类讲解Spring中常用的一些注解。
Spring部分
一、声明bean的注解
1. @Component
表示一个带注释的类是一个“组件”,成为Spring管理的Bean。当使用基于注解的配置和类路径扫描时,这些类被视为自动检测的候选对象。同时@Component还是一个元注解
2. @Service
组合注解(组合了@Component注解),应用在service层(业务逻辑层)
1 @Slf4j 2 @Service 3 @RequiredArgsConstructor(onConstructor_ = {@Autowired}) 4 public class TppAgencyHttpProxyServiceImpl implements TppAgencyHttpProxyService { 5 }
3. @Repository
组合注解(组合了@Component注解),应用在dao层(数据访问层)。
1 @Repository 2 public interface InsuranceAgreementMapper extends MPJBaseMapper<InsuranceAgreementDO> { 3 7 }
4. @Controller
组合注解(组合了@Component注解),应用在MVC层(控制层),DispatcherServlet会自动扫描注解了此注解的类,然后将web请求映射到注解了@RequestMapping的方法上
二、注入bean的注解
1. @Autowired
由 Spring 框架提供,是 Spring 的核心注解之一,用于实现依赖注入,支持按类型注入,也可以通过 @Qualifier 注解实现按名称注入。其典型使用场景是:
@Autowired
private MyService myService;
默认是按照类型装配注入的,如果想按照名称来装配注入,则需要结合@Qualifier一起使用由Spring提供
Spring提供的工具(由Spring的依赖注入工具(BeanPostProcessor、BeanFactoryPostProcessor)自动注入)
2. @Inject
由JSR-330提供
3. @Resource
由 JSR-250 规范提供,是一种标准的 Java 注解,广泛应用于各种 Java EE 规范中。它用于将资源注入到应用程序中,支持按名称或类型注入。其典型使用场景是:
@Resource
private MyService myService;
@Resource和@Autowired的区别
说明:@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入
1)@Resource是由J2EE(JSR-250)提供,而@Autowired是由spring提供,故减少系统对spring的依赖建议使用
2)@Resource和@Autowired都可以书写标注在字段或者该字段的setter方法之上
三、配置类相关注解
1. @Configuration
声明当前类为配置类,相当于xml形式的Spring配置
2. @Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式
3. @ComponentScan 用于对Component进行扫描,相当于xml中的:
<context:component-scan base-package="com.yp"></context:component-scan>
比如:指定了spring扫描的包路径为:com.eugene.sumarry.aop.csdn,这将说明在此包下的所有spring识别的注解都会被解析
四、切面(AOP)相关注解
1. @Aspect
声明一个切面(类上) 使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数。
@After :在方法执行之后执行(方法上)。
@Before: 在方法执行之前执行(方法上)。
@Around: 在方法执行之前与之后执行(方法上)。
@AfterReturning
@AfterThrowing
2. @PointCut
声明切点
3. @EnableAspectJAutoProxy
在java配置类中使用@EnableAspectJAutoProxy注解,开启Spring对AspectJ代理的支持(类上)。其中,proxyTargetClass属性指定了aop使用哪种代理方式来增强目标类
五、SpringMVC部分
1. @EnableWebMvc
在配置类中开启Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,若无此句,重写WebMvcConfigurerAdapter方法(用于对SpringMVC的配置)。
2. @Controller
声明该类为SpringMVC中的Controller
3. @RequestMapping
用于映射Web请求,包括访问路径和参数(类或方法上)
4. @ResponseBody
支持将返回值放在response内,而不是一个页面,通常用户返回json数据(返回值旁或方法上)
5. @RequestBody
允许request的参数在request体中,而不是在直接连接在地址后面。(放在参数前)
6. @PathVariable
用于接收路径参数,比如@RequestMapping(“/hello/{name}”)申明的路径,将注解放在参数中前,即可获取该值,通常作为Restful的接口实现方法。
6. @RestController
该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。
7. @ExceptionHandler
用于全局处理控制器里的异常。
六、@Enable*注解说明
这些注解主要用来开启对xxx的支持。
@EnableAspectJAutoProxy 开启对AspectJ自动代理的支持。
@EnableAsync: 开启异步方法的支持。
@EnableScheduling: 开启计划任务的支持。
@EnableWebMvc :开启Web MVC的配置支持。
@EnableConfigurationProperties :开启对@ConfigurationProperties注解配置Bean的支持。
@EnableJpaRepositories:开启对SpringData JPA Repository的支持。
@EnableTransactionManagement:开启注解式事务的支持。
@EnableTransactionManagement: 开启注解式事务的支持。
@EnableCaching: 开启注解式的缓存支持。