Spring注解相关Spring注解相关一、配置类组件1。Configuration2。ComponentScan3。Scope4。Lazy5。Conditional6。Import二、赋值(自动装配)类组件1。Component2。Service3。Controller4。Repository5。Value6。Autowired7。PropertySource8。Qualifier9。Primary10。Resource三、织入组件1。ApplicationContextAware2。BeanDefinitionRegistryPostProcessor四、切面组件1。EnableTransactionManagement2。Transactional一、配置类组件1。Configuration 把一个类作为一个容器,它的某个头上如果注册了Bean,就会作为这个Spring容器中的Bean。ConfigurationpublicclassMyConfig{}2。ComponentScan 在配置类上添加ComponentScan注解,该注解会默认扫描该类所在包下的所有配置类(添加过spring注解的类、Controller、Service、Repository、Component),相当于之前的context:componentscan。方式一:ComponentScan(valuecom。xinyu。major。chongci。spring01。componscan,includeFilters{ComponentScan。Filter(typeFilterType。CUSTOM,value{MyTypeFilter。class})},useDefaultFiltersfalse)publicclassMyConfig{}publicclassMyTypeFilterimplementsTypeFilter{Author:xinyuFDate:202231921:43Describe:metadataReader获取当前正在操作的类的信息metadataReaderFactory获取上下文中所有的信息Overridepublicbooleanmatch(MetadataReadermetadataReader,MetadataReaderFactorymetadataReaderFactory)throwsIOException{获取扫描到的注解信息AnnotationMetadataannotationMetadatametadataReader。getAnnotationMetadata();获取扫描到的类的信息ClassMetadataclassMetadatametadataReader。getClassMetadata();获取当前类的所有资源ResourceresourcemetadataReader。getResource();获取类名StringclassNameclassMetadata。getClassName();System。out。println(className);if(className。contains(Person)){}}}方式二:ComponentScan(com。xinyu。major。chongci。spring01。componscan)publicclassMyConfig{}3。Scope 用于指定作用域作用在类和方法上 value值: prototype:原型、多例 singleton:单例(默认) request:主要应用于web模块,同一次请求只创建一个实例 session:主要应用于web模块,同一个session只创建一个实例Scope(request)publicvoidgetName(){}Scope(request)publicclassPersonA{}4。Lazy 延时加载,被调用的时候才会加载,只针对单例bean起作用(默认是非延时加载)LazypublicvoidgetName(){}5。Conditional Spring4开始提供,它的作用是按照一定的条件进行判断,满足条件给容器注册BeanConditional(WinCondition。class)BeanpublicvoidloadName(){System。out。println(win加载);}Conditional(LinuxCondition。class)BeanpublicvoidloadName2(){System。out。println(Linux加载);}publicclassWinConditionimplementsCondition{Overridepublicbooleanmatches(ConditionContextcontext,AnnotatedTypeMetadatametadata){ConfigurableListableBeanFactorybeanFactorycontext。getBeanFactory();Environmentenvironmentcontext。getEnvironment();Stringpropertyenvironment。getProperty(os。name);System。out。println(property);if(property。contains(Windows)){}}}publicclassLinuxConditionimplementsCondition{Overridepublicbooleanmatches(ConditionContextcontext,AnnotatedTypeMetadatametadata){ConfigurableListableBeanFactorybeanFactorycontext。getBeanFactory();Environmentenvironmentcontext。getEnvironment();Stringpropertyenvironment。getProperty(os。name);System。out。println(property);if(property。contains(Linux)){}}}6。Import 导入外部资源Import(value{PersonA。class,MyImportSelector。class,MyImportBeanDefinitionRegistrar。class})publicclassMyConfig{}publicclassMyImportSelectorimplementsImportSelector{OverridepublicString〔〕selectImports(AnnotationMetadataimportingClassMetadata){returnnewString〔〕{com。xinyu。major。chongci。spring01。test。Member,com。xinyu。major。chongci。spring01。test。Shansa};}}publicclassMyImportBeanDefinitionRegistrarimplementsImportBeanDefinitionRegistrar{OverridepublicvoidregisterBeanDefinitions(AnnotationMetadataimportingClassMetadata,BeanDefinitionRegistryregistry){BeanDefinitionbeanDefinitionnewRootBeanDefinition(User。class);registry。registerBeanDefinition(user,beanDefinition);}}二、赋值(自动装配)类组件1。Component 泛指组件,当组件不好归类时可以用这个注解进行标注2。Service 用于标注业务层组件3。Controller 用于标注控制层组件4。Repository 用于标注数据访问层组件,Dao5。Value 普通数据类型赋值6。Autowired 默认按类型匹配,如果我们想匹配名称可以结合Qualifier注解一起使用7。PropertySource 读取配置文件赋值PropertySource(value{application。yml})publicclassPropertySourceMain{}8。Qualifier 如存在多个实例配合使用,取别名Qualifier(aaa)BeanpublicvoidgetBean(){}AutowiredQualifier(bbb)privateS9。Primary 自动装配出现多个Bean候选者时,被注解为Primary的Bean为首选者,否则将抛出异常。10。Resource 默认按名称装配,当找不到与名称匹配的bean才会按类型装配。三、织入组件1。ApplicationContextAware 可以通过这个上下文环境对象得到Spring容器中的Bean2。BeanDefinitionRegistryPostProcessor BeanDefinitionRegistryPostProcessor实现了BeanFactoryPostProcessor接口,是Spring框架的BeanDefinitionRegistry的后处理器,用来注册额外的BeanDefinition四、切面组件1。EnableTransactionManagement 添加对事务管理的支持2。Transactional 配置声明式事务信息