Spring常用注解

1、给容器中注入组件-交由spring管理

@Component:泛指各种组件,用于将当前类对象存入Spring容器中

@Controller:用在控制层

@Service:用在业务层

@Repository:用在数据访问层

@Bean:导入第三方包里面的注解

@Import:要导入到容器中的组件

@ImportSelector:返回需要导入的组件的全类名数组

@ImportBeanDefinitionRegistrar:手动注册bean到容器中

2、注入bean的注解

        依赖注入的功能,是通过先在 Spring IoC 容器中查找对象,再将对象注入引入到当前类中。而查找有分为两种实现:按名称(byName)查找或按类型(byType)查找,其中 @Autowired 和 @Resource 都是既使用了名称查找又使用了类型查找,但二者进行查找的顺序却截然相反。

@Autowired:自动按照类型注入,只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功。

  • 可以作用在变量、setter方法、构造函数上
  • 按照类型(byType)装配依赖对象
  • 默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。
  • 如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。(通过类型匹配找到多个candidate,在没有@Qualifier、@Primary注解的情况下,会使用对象名作为最后的fallback匹配)

@Qualifier:用于指定要注入的bean的id

  • 在按照类型匹配的基础上,再按照名称匹配注入。
  • 它在给类的成员变量注入时,不能单独使用,要和@Autowired配合使用。当按照类型注入冲突时配合@AutoWired
  • 它在给方法参数进行注入时,可以单独使用。

@Resource:按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。

  • @Resource有两个重要的属性:name和type
  • Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型
  • 如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略
  • 如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

3、Java配置类相关注解

@Configuration:声明当前类为配置类

@Bean:注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式

@ComponentScan:用于对Component进行扫描

4、切面(AOP)相关注解

        需要在配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持

@Aspect :声明一个切面

@After :在方法执行之后执行(方法上)

@Before :在方法执行之前执行(方法上)

@Around :在方法执行之前与之后执行(方法上)

@PointCut: 声明切点

5、@Value注解

  • 注入普通字符
  • 注入操作系统属性
  • 注入表达式结果
  • 注入其它bean属性
  • 注入文件资源
  • 注入网站资源
  • 注入配置文件

三种用法:

  1. ${}是去找外部配置的参数,将值赋过来
  2. #{}是SpEL表达式,去寻找对应变量的内容
  3. #{}直接写字符串就是将字符串的值注入进去

6、异步注解

@EnableAsync:配置类中通过此注解开启对异步任务的支持;

@Async:在实际执行的bean方法使用该注解来声明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务)

7、定时任务注解

@EnableScheduling:在配置类上使用,开启计划任务的支持(类上)

@Scheduled:来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持)

8、Enable***注解说明

@EnableAspectAutoProxy:开启对AspectJ自动代理的支持;
@EnableAsync:开启异步方法的支持;
@EnableScheduling:开启计划任务的支持;
@EnableWebMvc:开启web MVC的配置支持;
@EnableConfigurationProperties:开启对@ConfigurationProperties注解配置Bean的支持;
@EnableJpaRepositories:开启对SpringData JPA Repository的支持;
@EnableTransactionManagement:开启注解式事务的支持;
@EnableCaching:开启注解式的缓存支持;

9、测试注解

@RunWith:运行器,Spring中通常用于对JUnit的支持

@ContextConfiguration:用来加载配置配置文件,其中classes属性用来加载配置类

10、事务注解

@Transactional注解是用于事务控制的,需要知道事务的ACID特征:即原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

事务是用来控制数据的ACID特性的,用于保证数据的正确性和完整性。

@Transactional注解有两种使用方式:

(1)标注在类上面:
当作用于类上时,该类的所有public方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。

(2)标注在方法上面:
当作用于方法上时,只有当该方法发生了异常才会进行回滚,其他的方法不受影响。

        在项目中使用,@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚。

你可能感兴趣的:(Spring,spring,java,后端)