java中的注解

一、Spring 中的常见注解。

1、声明 Bean 的注解。

  • @Component:该注解是一个泛化概念,仅仅表示一个组件对象(Bean),没有明确的角色。
  • @Repository:该注解用于数据访问层(DAO)的类标识符为Bean,即注解数据访问层Bean,其功能与@Component()相同。
  • @Service:该注解用于标注一个业务逻辑组件类(service层),其功能与Component()相同。
  • @Controller:该注解用于标注一个控制器组件类(Spring MVC 的Controller),其功能与Component()相同。
  • @RunWith(SpringJUnit4ClassRunner.class):用于指定junit运行环境,spring提供了org.springframework.test.context.junit4.SpringJUnit4ClassRunner作为Junit测试环境。
  • @ContextConfiguration("classpath:applicationContext.xml"):该注解指定创建容器时使用的配置文件。
  • @Configuration:用于定义配置类。
  • @Component-Scan(basePackages = {"dao","service"}):配置扫描包。
  • @PropertySource(value={classpath:jdbc.properties},ignoreResourceNotFound=true):可配置一个或多个配置文件。多个配置的Value:value={classpath:jdbc.properties,"xxx","xxx"}

2、注入Bean的注解。

  • @Autowired:默认按照Bean的类型进行自动装配。该注解可以对类或成员变量、方法及构造方法进行标注,完成自动装配的工作。
  • @Resource:该注解默认按照名称进行装配。当找不到与名称匹配的Bean时才会按照类型来装配注入。该注解有name(实例名称)、type(实例类型)两个属性。
  • @Qualify:该注解与@Autowired配合使用。当@Autowired需要按照名称来装配注入时,Bean的实例名称由@Qualify中的参数指定。

3、声明方法的注解。

  • @Override:被标注的方法重载了父类的方法。
  • @PostConstruct:该注解在对象被创建后调用标注的方法。可用作初始化。
  • @PreDestroy:该注解在对象销之前调用标注的方法。
  • @Test:可对被标注的方法进行单元测试。
  • @Bean:在方法上使用@Bean注解,方法就会创建一个Bean对象交给Spring管理,且产生这个bean对象的方法在整个spring的生命周期中只会被调用一次,调用完成之后spring会将这个bean对象放在自己的ioc容器中。

    @Bean(initMethod="initService',destroyMethod="destroyService"):@Bean注解的initMethod和destroyMethod属性可对Bean进行初始化和销毁。构造方法之后、销毁之前执行。

4、声明参数的注解。

  • @Value:该注解将参数指定的值动态注入到 Bean 中。@Value("xxx")、@Value("${jdbc.xxx}')等。

5、AspectJ注解。

  • @Aspect:用于定义一个切面,注解在切面类上。
  • @Pointcut:用于定义切入点表达式。在使用时,需要定义一个切入点的方法,该方法是一个返回值为viod,且方法体为空的普通方法。
  • @Before:用于定义前置通知,目标方法运行之前调用。在使用时,通常为其指定Value属性值,该值可以是已有的切入点,也可以直接定义切入点表达式。
  • AfterReturning:用于定义后置返回通知。在目标方法运行之后调用,如果出现异常则不会调用。使用时同上。
  • @Around:用于定义环绕通知。在目标方法运行之前和运行之后都调用。
  • @AfterThrowing:用于定义异常通知。如果出现异常,就会调用。使用时同上,另外还有一个Throwwing属性用于访问目标方法抛出的异常,该属性值与异常通知方法中同名的形参一致。
  • @After:用于定义后置(最终)通知。在目标方法运行之后调用(无论是否出现异常都会调用)。

6、基于@Transactional注解的声明式事务管理。

  • @EnableTransactionManagement:在配置类上开启声明事务的支持,同事为数据源添加事务管理器。
  • @Transactional:可以作用在接口、接口方法、类以及类方法上,但不建议使用在接口或接口方法上,因为只有在使用基于接口的代理时它才会生效。当作用于类上时,该类下的所有public方法都将具有该类型的事务属性,同时,也可以在方法级别使用该注解来覆盖类级别的定义 。

  @Transactional的属性:

  propagation:定义了事务的生命周期,主要有以下选项:

  1. Propagation.REQUIRED:需要事务支持的方法A被调用时,没有事务新建一个事务。当在方法A中调用另一个方法B时,方法B将使用相同的事务。如果方法B发生异常需要数据回滚时,整个事务数据回滚。
  2. Propagation.REQUIRED_NEW:对于方法A和B,无论是否有事务都会开启一个新的事务;方法B有异常不会导致方法A回滚。
  3. Propagation.NESTED:和Propagation.REQUIRED_NEW类似,仅支持JDBC,不支持JPA或Hibernate。
  4. Propagation.SUPPORTS:方法调用时有事务就使用事务,没有事务就不创建事务。
  5. Propagation.SUPPORTED:强制方法在十五中执行,若有事务i,在方法调用到结束阶段事务都将会被挂起。
  6. Propagation.NEVER:强制方法不在事务中执行,若有事务则抛出异常。
  7. Propagation.MANDATORY:强制方法在事务中执行,若无事务则抛出异常。

  isolation(事务隔离):决定了事务的完整性,处理再多事务对相同数据下的处理机制,主要包括以下隔离级别(前提是当前数据库是否支持):

  1. Isolation.READ_UNCOMMITTED:对于在事务A中修改了一条记录但没有提交的事务,在事务B中可以读取到修改后的记录。可导致脏读、不可重复读以及幻读。
  2. Isolation.READ_COMMITTED:只有当在事务A中修改了一条记录且提交事务后,事务B才可以读取到提交后的记录,防止脏读,但可能导致不可重复读和幻读。
  3. Isolation.REPEATABLE_REDA:不仅能实现Isolation.READ_COMMITTED的功能,而且还能阻止当 事务A读取了一条记录,事务B将不允许修改该条记录;阻止脏读和不可重复读,但可出现幻读。
  4. Isolation.SERIALIZABLE:此级别下事务是顺序执行的,可以避免上述级别缺陷,但开销较大。
  5. Isolation.DEFAULT:使用当前数据库的默认隔离级别。如Oracle和SQL Server是READ_COMMITTED;MySQL是REPEATABLE_READ。

  timeout:指定事务过期时间,默认为当前数据库的事务过期时间。

  readOnly:指定当前事务是否是只读事务。

  rollbackFor:指定哪个或那些异常可以引起事务回滚(Class对象数组,必须继承自Throwable)。

    捕获异常打方法如下:

  1. 修改@Transactional注解:@Transactional(rollbackFor={Exception.class})指定回滚生效的异常类,多个异常类逗号分隔。
  2. 在catch语句中添加“throw new RuntimeException();”语句。

   注意:在实际工程应用中,在catch语句中添加“TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();”语句即可。不需要在@Transactional注解中添加rollbackFor属性。

  rollbackForClassName:指定哪个或那些异常可以引起事务回滚(类名数组,必须继承自Throwable)。

  noRollBackFor:指定哪个或那些异常不可以引起事务回滚(Class对象数组,必须继承自Throwable)。

  NoRollbackForClassName:指定哪个或那些异常不可以引起事务回滚(类名数组,必须继承自Throwable)。

 7、SpringMVC的注解。

  • @RequestMapping:当作用在方法上,注解的value属性将请求URL映射到方法,value值是该注解的默认属性,如果就一个value属性则可以省略该属性。当作用在类上时,控制器类中的所有方法都将映射为类级别的请求。
  • @RequestParam:该注解将请求参数绑定到控制器的方法参数上。语法:@RequestParam(Value=“参数名”)。
  • @ModelAttribute:该注解可将请求参数绑定到实体对象。也可以注解一个非请求处理方法,被@ModelAttribute注解的方法,将在每次调用该控制类的请求处理方法前被调用,这种特性可以用来控制登录权限。
  • @EnableWebMvc:可以实现配置Webmvc,使用该注解后配置一个继承于WebMvcConfigurerAdapter的配置类即可配置好Spring Webmvc。
  • @ResponseBody:接收页面请求的JSON数据,并返回JSON格式结果。
  • @RequestBody:在请求方法的参数上加上该注解,spring就会将request body中的json/xml对象解析成该参数类型的Javabean对象。

8、SpringBoot的注解。

  • @RestController:相当于@ResponseBody+@Controller注解。
  • @SpringBootApplication:标注为应用启动类。相当于@SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan。该配置的exclude属性可关闭特定的自动配置。如@SpringBootApplication(exclude={xxxx.class})。
  • @SpringBootConfiguration:是SpringBoot应用的配置注解。
  • @EnableAutoConfiguration:自动配置项目的相关配置。
  • @ComponentScan:自动扫描@SpringBootApplication所在类的同级包以及它的子包中的配置。

 

posted @ 2022-11-23 23:47  炒股沦为首负  阅读(68)  评论(0编辑  收藏  举报