Spring&SpringBoot常用注解

关键类

  • ClassPathXmlApplicationContext
  • AnnotationConfigurationApplicationContext

组件类

@Component

@Controller

@RestController

  • @Controller
  • @ResponseBody

@Service

@Repository

依赖注入类

@Autowired

@Autowired 是Spring的注解。可以标注在构造器,参数,方法(setter、@Bean(可略,默认从容器中拿)),属性。通过 byType 的方式去注入,仅有一个required属性,默认为true,默认装配规则如下:

1.先通过类型查找,找到只有一个则装配,找不到则抛出异常,如果找到多个,则将field的名称作为组件的id去容器中查找,找到则装配,找不到则抛出异常。
2.当required为false时,最终找不到则忽略不装配。

@Qualifier

@Qualifier是Spring的注解。字面含义为合格者,按名称注入。用于装配时有多个候选bean时通过指定一个标识来解决冲突,仅有一个默认value属性,作为标识,定义bean时通过添加@Qualifier(“xxx”)指定。每一个bean都有一个自身名称标识的Qualifier。

一般当出现两个及以上bean时,不知道要注入哪个,作为@Autowired()的修饰用。

1.当value不指定时,这个标识为"",而不是bean的名称或者作用的属性名称。
2.当通过类型找到一个时,但是不匹配Qualifier指定标识,也会抛出异常(它不仅解决冲突,甚至有点矫枉过正)

@Primary

指定Bean为首选装配组件,当找到多个Bean时,首选Bean被自动装配。

@Resource(JSR250)

@Resource 是 J2EE 的注解。以通过 byName 和 byType 的方式注入。不支持@Primary。

默认先按 byName的方式进行匹配,如果匹配不到,再按 byType的方式进行匹配。用与资源(通常是JNDI)的注入。 Spring对其进行了支持。

装配规则:

1.如果指定了name属性,则按照name查找,找到且类型匹配则装配,否则配抛出异常
2.如果指定了name和type属性,则按照name和type精确查找,找到则装配,找不到抛出异常
3.如果仅指定了type属性,则按照type查找,如果只找到一个则装配,否则抛出异常
4.如果name和type都没有指定,则默认按照作用的属性名字查找,找到则装配,找不到则按照类型找,找到一个则装配,找不到或者找到多个抛出异常

注意 : 如果不指定name 和 type。先按 byName (其name为 注入的自定义的名称,首字母大写的变为小写,后面为驼峰命名规则)。 如果匹配不到,再按 byType的方式进行匹配。

@Inject(JSR330)

需要导入javax.inject包,和@Autowried功能一样,但不支持required属性。

@Named(JSR330)

需要导入javax.inject包,和@Qualifier功能一样。

SpringMVC

@RequestMapping

@GetMapping

组合注解,相当于 @RequestMapping(method = RequestMethod.GET)

@PostMapping

组合注解,相当于 @RequestMapping(method = RequestMethod.POST)

@PathVariable

获取url中的数据

@RequestParam

获取请求参数的值

@Valid

表单验证在Controller层加上@valid,后紧跟BindingResult,通过
BingdingResult.getFieId.getDefaultMessage()获取错误信息,表单验证注解

@ExceptionHandler(value = Exception.class)

捕获异常 (用于统一异常处理)

@Scope

- singleton:单实例,在容器启动的时候创建对象,容器关闭时销毁对象。
- prototype:多实例,在每次使用的时候创建对象,容器关闭时容器并不负责销毁,必须手动销毁。

@Lazy

@PostConstruct(JSR250)

@PreDestroy(JSR250)

xxxAware接口

实现Aware接口,可以注入Spring底层组件(ApplicationContext,BeanFactory等)到自定义组件中(通过后置处理器注入),同时Aware实现方法可以被Spring回调。

@Profile

  • 标注在@Bean方法上。
  • 标注在配置类@Configuration上。
  • 没有标注环境标识的bean在任何环境下都是加载的。
  • 激活方式:
    • 命令行方式激活:-Dspring.profiles.active=dev
    • 代码方式激活
// 创建ApplicationContext
AnnotationConfigApplicationContext applicationContext = new AnnocationConfigApplicationContext();
// 设置激活环境
applicationContext.getEnvironment().setActiveProfiles("test","dev");
// 注册主配置类
applicationContext.register(MainConfigProfile.class);
// 启动刷新容器
applicationContext.refresh();

@PropertySource & @PropertySources

读取外部配置文件,保存在运行环境变量中,等效于xml文件的<context:property-placeholder>

  • value:数组,可以一次指定多个配置文件

@ConfigurationProperties

@Value

  • 基本数值
  • SpEL,#{}
  • @PropertySource,${},取出配置文件中的值(在运行环境变量里的值),此方式可以标注在属性上,也可以标注在方法参数上
  • 实现EmbeddedValueResolverAware接口的setEmbeddedValueResolver方法获取到StringValueResolver,然后在获取到属性值。

Spring AOP

@EnableAspectJAutoProxy

  • 开启基于注解的AOP模式
  • 等效于xml的<aop:aspectj-autoproxy>
  • 给容器中导入类:@Import(AspectJAutoProxyRegistrar.class),利用AspectJAutoProxyRegistrar给容器中注入AnnotationAwareAspectJAutoProxyCreator。
    注意EnableXXX的功能是在容器中注册组件,主要关注注册的是什么组件,组件什么时候工作,组件有什么功能?

@Aspect

  • 定义切面类

@Pointcut

  • 定义切入点表达式
  • 切入点表达式可以用在类内部,或者用在外部类(需要指定全名)

SpringBoot

@SpringBootApplication

组合注解

  • @SpringBootConfiguration:表示Application作为配置文件存在
  • @EnableAutoConfiguration:表示启用SpringBoot内置的自动配置功能
  • @ComponentScan : 扫描bean,路径为Application类所在package以及package下的子路径,在spring boot中bean都放置在该路径以及子路径下。

@Configuration

  • 本质是@Component
  • 等效于applicationContext.xml配置文件
  • 如果在创建IoC容器时不是指定扫描包的方式,而是直接指定配置类的方式,则此注解也可以不标注。
@Configuration
public class AppConfig(){
	@Bean
	...
}

@Bean

等效于xml文件的<bean>

  • @Bean
    • value:指定bean id
    • 生命周期
      • 构造方法
      • initMethod,等效方法是实现InitializingBean接口,或者在init方法上直接使用注解@PostConstruct(JSR250)。注意:initMethod已经不推荐,推荐在@Bean方法内部直接通过编程方式实现init方法的内容。
      • destroyMethod,等效方法是实现DisposableBean接口,或者在destroy方法上直接使用注解@PreDestroy(JSR250)。
      • 实现BeanPostProcessor接口,对所有Bean统一设置init方法调用前后的拦截方法。注意:此接口是Spring非常重要的接口,可以完成与Bean相关的各种分析处理。
// 给容器注册Bean,类型为返回值类型,id默认为方法名,@Bean参数也可以指定id。
@Bean("person")
@Scope("singleton")
@Lazy
public Person person01(){
	return new Person("Yanggle")
}

@ComponentScan & @ComponentScans

等效于xml文件的<context:component-scan>,@ComponentScan可以配置多个,或者用@ComponentScans组合多个配置。

  • value:指定扫描的包
  • includeFilters:过滤需要包含的包
  • excludeFilters:过滤需要排除的包
  • @Filter
    • type:ANNOTATION,ASSIGNABLE_TYPE,CUSTOM,ASPECTJ,REGEX
    • classes
    • 实现TypeFilter接口,根据不同的场景加载不同的Bean。
@ComponentScan(value="com.yanggle",
	includeFilters={
		@Filter(type="FilterType.ANNOTATION",classes={Controller.class})
	}
)
@ComponentScan(value="com.yanggle",
	excludeFilters={
		@Filter(type="FilterType.ANNOTATION",classes={Service.class})
	},
)
public class AppConfig(){
	@Bean
	...
}

@Conditional

可以标注在方法上,也可以标注在类上

// 给容器注册Bean,类型为返回值类型,id默认为方法名,@Bean参数也可以指定id。
@Conditional({LinuxCondition.class})
@Bean("person")
public Person person01(){
	return new Person("Yanggle")
}

public class LinuxCondition implement Condition{
	public boolean matches(ConditionContext context,AnnotationTypeMetadata metadata){
		//获取BeanFactory
		//获取类加载器
		//获取当前环境信息
		//获取Bean注册类
		return true;
	}
}

@Import

Bean加载方式:

  • 组件注解 + 包扫描:自定义组件常用
  • @Bean:加载第三方组件常用
  • @Import:id默认是全类名
    • 通过指定需要导入的具体类数组。
    • 通过实现ImportSelector接口的selectImports方法,返回需要导入的所有类的全类名数组,注意:此方法不能返回null,但可以返回空数组。
    • 通过实现ImportBeanDefinitionRegistrar接口的registerBeanDefinitions方法手工注册Bean到容器中。
    • 通过实现Spring提供的FactoryBean接口实现Bean注册到容器中。
      • 默认获取到的是工厂Bean调用getObject创建的对象。
      • 要获取工厂Bean本身则需要在id前加一个标识符“&”。
    • SpringBoot中大量借助ImportSelector和ImportBeanDefinitionRegistrar来导入类。
@Configuration
@Import({Person.class, MyImportSelector.class,MyImportBeanDefinitionRegistrar.class})
public class AppConfig(){
	@Bean
	...
}

@DependsOn

@EnableTransactionManagement

开启事务管理

MyBatis

@MapperScan(“com.yanggle.dao”)

@Mapper

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值