Spring注解汇总

Spring注解汇总

Spring中注解一览:

导入组件

  • @Configuration

    告诉Spring这是一个配置类,相当于原来的.xml或者.properties配置文件

  • @Bean

    相当于原来.xml文件中的标签,代表向容器中注入一个JavaBean,该注解作用在方法上,方法的返回值代表Bean的类型,方法名(或者注解的属性)代表Bean的id.

    可以在注解中指定该Bean的初始化方法和销毁方法:@Bean(initMethod="", destoryMethod="")这样在容器给我们创建bean的时候就会执行对应的方法.

    除了注解,如果我们要注册的Bean实现了InitializingBean接口和DisposableBean接口,那么在创建完对象以后会执行对应的初始化方法,我们可以自定义初始化和销毁的逻辑.

  • @ComponentScan

    扫描注解,作用在类上,只要扫描的路径下的类上标注了@Service、@Controller、@Repository等注解就可以扫描到,作用和原来xml文件中包扫描的标签一致.

    该注解的属性中,value指定要扫描的包;excludeFilters指定扫描的时候排除的元素,该属性是一个数组,可以指定多个.

    ep:

    @ComponentScan(value = 'com.xiaojian', excludeFilters = {
        @Filter(type=FilterType.ANNOTATION,
               classes={Controller.class, Service.class})
    })
    

    以上代码中表示在包扫描的时候排除Controller注解和Service注解标注的类.

    该注解还有一个属性includeFilters,指定扫描的时候只包含什么组件.

  • @ComponentScans

    该注解可以包含多个@ComponentScan注解,可以自己组合使用.

  • @Scope

    设置bean的作用域,在spring中,默认获得的JavaBean是单实例的,如果我们要改变这种规则,可以使用此注解来设置,取值有四种:prototypesingletonrequestsession,其中prototype表示多实例,singleton表示单实例,也就是默认情况.request表示同一次请求创建一个实例,session同一个session创建一个实例.

    需要知道的是,如果是单实例情况,那么在容器启动的时候,spring就已经帮我们创建好了实例对象并放在IOC容器中,如果是prototype多实例,是在每次获取的时候创建对象,且每次调用都创建一个.

  • @Lazy

    懒加载.spring创建对象是单实例的,默认是在容器启动的时候就创建好了对象,如果我们使用此注解,就可以在获取对象的时候才创建,这样子在IOC容器初始化的时候就不会帮我们创建对象了.

  • @Conditional

    按照一定的条件进行判断,满足条件才给容器中注册bean

    这个注解是spring4.0后给我们提供的,在springboot中使用比较频繁,可以使用在类上,也可以使用在方法上.

    该注解的参数需要传Condition,Condition是一个接口,有一个方法matches,返回值是boolean类型,true代表匹配成功,false代表不匹配,我们只需要自定义Condition的实现类即可.

    matches方法有两个参数:ConditionContextAnnotatedTypeMetadata,前者表示判断条件能使用的上下文环境对象,后者表示注释信息.

    如果该注解放在类上,那么只有当满足条件的时候,当前类中配置的所有bean才会注册.

  • @Import

    快速给容器中注册一个组件,注册的id默认是全类名

    也可以在该注解中以数组的方式导入多个组件.

    @Import({"com.xxx.xx", "com.xxx.xxxx"})
    

    除了指定具体的导入类,也可以使用自定义的逻辑筛选来导入,即在该注解中指定属性ImportSelector,ImportSelector是一个接口,它有一个方法selectImports(),返回值是一个String[],就是导入到容器中的组件的全类名.我们需要自己实现这个接口,编写自己的选择导入逻辑即可.

    @Import({Book.class, User.class, MySelector.class})
    

    selectImports()方法有一个参数AnnotationMetadata,它表示当前标注@Import注解的类的所有注解信息.

    除了以上两种属性,Import注解还有一个属性:ImportBeanDefinitionRegistrar,它也是一个接口,有一个方法registerBeanDefinitions(),这个方法除了有AnnotationMetadata参数,还有一个BeanDefinitionRegister,代表组件注册的信息,可以通过它的方法registerBeanDefinition来自定义注册组件.

除了以上的注解来组合使用方便我们导入Bean组件,我们也可以使用spring的FactoryBean工厂来导入Bean.使用FactoryBean获取的bean是工厂调用getObject创建的对象,如果我们要获取工厂bean本身,需要在getObject方法中,在id前加&标识即可.

  • @PostConstruct

    在bean创建完,属性赋值结束以后调用标注方法,进行初始化

  • PreDestroy

    在容器销毁之前调用,进行清理工作

以上两个注解都是标注在JavaBean中的方法之上的

属性赋值

  • @Value

    该注解使用的时候可以有以下几种:

    1. 基本数值: @Value("张三")

    2. SpEl表达式: @Value("#{20-2}")

    3. 可以写${},取出配置文件中的值.需要配合下面的@PropertySource注解一起使用

      @Value("${xxx.xxx}")

  • @PropertySource

    加载配置文件,注解的value是个String[],可以指定多个

自动装配

  • @Autowired

    默认优先按照类型去容器中查找装配,如果找到多个再将属性的名称作为id去查找.

    该注解有个属性required,默认是true,表示是否必须,如果指定为false,则容器中没有该组件时,会默认为null.

    该注解可以标注在以下几个位置:

    1. 标注在方法上,会从IOC容器中获取对应的bean给方法中使用
    2. 标注在构造器上,构造器要用的参数也会从IOC容器中获取
    3. 标注在方法参数位置,同样是从容器中获取.
  • @Qualifier

    配合@Autowired使用,指定需要装配的组件的id

  • @Primary

    使用此注解让Spring在自动装配的时候,默认使用首选的bean.

    也就是说,如果不指定装配的组件的id时,默认使用加了@Primary注解的bean.

  • @Resource

    属于java的规范,也可以实现自动装配,但是该注解默认按照组件名称装配.

  • @Inject

    也可以实现自动装配,不过使用该注解需要导入javax.inject的包,功能和Autowired一样.

除了以上的注解来自动注入,如果我们要使用spring的底层组件,比如:applicationContext、BeanFactory等,只需要自定义一个组件,实现spring中的xxxAware接口,实现对应的方法即可.

Profile

指定组件在对应的环境下才能注册到容器中

  • @Profile

    对组件进行环境标识,只有当前环境激活的时候才能注册到容器中.

    该注解标注的组件可以指定id.

    要激活对应的 环境,有以下几种方式:

    1. 命令行参数: -Dspring.profiles.active=test

    2. //创建一个applicationContext
      AnnotationConfigApplicationContext application = new AnnotationConfigApplicationContext();
      //设置环境
      aoolicationContext.getEnvironment().setActiveProfiles("text", "dev");
      //注册配置类
      applicationContext.register(xxxx.class);
      //启动刷新容器
      applicationContext.refresh();
      

Spring AOP注解

  • @Before 前置通知

    在目标方法执行之前切入,需要指定切点表达式来指定目标方法

    @Before("public int com.xiaojian.Hello.sayHello(int x, int y)")

  • @After 后置通知

    在目标方法运行结束之后切入(无论正常结束还是异常结束).

  • @AfterReturning

    目标方法正常返回之后运行

    该注解中,可以用value来指定切点表达式

    属性returning来指定接受目标方法返回值的参数.

    可以在方法参数中指定JointPoint,它包含了目标方法的各种信息.且它只能出现在切入方法参数的第一个位置.

  • @AfterThrowing

    目标方法出现异常以后运行

    属性throwing来指定接受异常信息的参数

  • @Pointcut

    抽取公共的切点表达式给其他AOP注解使用

    @Pointcut("excution(public int com.xxx.xxx)")
    public void pointCut() {}
    
  • @Aspect

    告诉spring当前标注类是一个切面类.

  • @EnableAspectJAutoProxy

    写在配置类上,开启基于注解的AOP模式;

声明式事物

  • @EnableTransactionManagement

    开启基于注解的事物管理.

    且需要在配置类中配置事务管理器PlatformTransactionManager

  • @Transactional

    给当前标注的方法开启事物,需要@EnableTransactionManagement注解的支持

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值