Spring常用注解
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。 @Configuration public class MyConfig{ } 2.@ComponentScan
在配置类上添加@ComponentScan注解,该注解会默认扫描该类所在包下的所有配置类(添加过spring注解的类、@Controller、@Service、@Repository、@Component),相当于之前的context:component-scan. 方式一: @ComponentScan(value = "com.xinyu.major.chongci.spring01.componscan" , includeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM, value = {MyTypeFilter.class})} , useDefaultFilters = false ) public class MyConfig { } public class MyTypeFilter implements TypeFilter { /** * @Author: xinyu F * @Date: 2022/3/19 21:43 * @Describe: metadataReader 获取当前正在操作的类的信息 * metadataReaderFactory 获取上下文中所有的信息 */ @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { //获取扫描到的注解信息 AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata(); //获取扫描到的类的信息 ClassMetadata classMetadata = metadataReader.getClassMetadata(); //获取当前类的所有资源 Resource resource = metadataReader.getResource(); //获取类名 String className = classMetadata.getClassName(); System.out.println("=======================" + className + "======================="); if (className.contains("Person")) { return true; } return false; } } 方式二: @ComponentScan("com.xinyu.major.chongci.spring01.componscan") public class MyConfig { } 3.@Scope
用于指定作用域 作用在类和方法上
value值:
prototype:原型、多例
singleton:单例(默认)
request:主要应用于web模块,同一次请求只创建一个实例
session:主要应用于web模块,同一个session只创建一个实例 @Scope("request") public void getName(){ } @Scope("request") public class PersonA { } 4.@Lazy
延时加载,被调用的时候才会加载,只针对单例bean起作用(默认是非延时加载) @Lazy public void getName(){ } 5.@Conditional
Spring4开始提供,它的作用是按照一定的条件进行判断,满足条件给容器注册Bean @Conditional(WinCondition.class) @Bean public void loadName() { System.out.println("win加载"); } @Conditional(LinuxCondition.class) @Bean public void loadName2() { System.out.println("Linux加载"); } public class WinCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { ConfigurableListableBeanFactory beanFactory = context.getBeanFactory(); Environment environment = context.getEnvironment(); String property = environment.getProperty("os.name"); System.out.println(property); if (property.contains("Windows")) { return true; } return false; } } public class LinuxCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { ConfigurableListableBeanFactory beanFactory = context.getBeanFactory(); Environment environment = context.getEnvironment(); String property = environment.getProperty("os.name"); System.out.println(property); if (property.contains("Linux")) { return true; } return false; } } 6.@Import
导入外部资源 @Import(value = {PersonA.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class}) public class MyConfig { } public class MyImportSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) { return new String[]{"com.xinyu.major.chongci.spring01.test.Member", "com.xinyu.major.chongci.spring01.test.Shansa"}; } } public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { BeanDefinition beanDefinition = new RootBeanDefinition(User.class); registry.registerBeanDefinition("user", beanDefinition); } } 二、赋值(自动装配)类组件1.@Component
泛指组件,当组件不好归类时可以用这个注解进行标注 2.@Service
用于标注业务层组件 3.@Controller
用于标注控制层组件 4.@Repository
用于标注数据访问层组件,Dao 5.@Value
普通数据类型赋值 6.@Autowired
默认按类型匹配,如果我们想匹配名称可以结合@Qualifier注解一起使用 7.@PropertySource
读取配置文件赋值 @PropertySource(value= {"application.yml"}) public class PropertySourceMain { } 8.@Qualifier
如存在多个实例配合使用,取别名 @Qualifier("aaa") @Bean public void getBean(){ } @Autowired @Qualifier("bbb") private String name; 9.@Primary
自动装配出现多个Bean候选者时,被注解为@Primary的Bean为首选者,否则将抛出异常。 10.@Resource
默认按名称装配,当找不到与名称匹配的bean才会按类型装配。 三、织入组件1.ApplicationContextAware
可以通过这个上下文环境对象得到Spring容器中的Bean 2.BeanDefinitionRegistryPostProcessor
BeanDefinitionRegistryPostProcessor实现了BeanFactoryPostProcessor接口,是Spring框架的BeanDefinitionRegistry的后处理器,用来注册额外的BeanDefinition 四、切面组件1.@EnableTransactionManagement
添加对事务管理的支持 2.@Transactional
配置声明式事务信息
人类的起源?人类的起源,人类只是地球上很多物种之一。只有不断增加生命体的进化才能让人类这个品种活得更久远。人类一直在探索自身的基因进化秘密,这就是长生的秘密。从古至今都在研究这个秘密。长生不是
谈智能研发以下文章来源于智造苑,作者小智导读实现智能研发是一个复杂而漫长的过程。企业除了要建立完善的研发体系以外,还应通过信息化技术实现产品全生命周期中数据流的自动化,以用户为中心,通过智能
推荐一款高效精准的离线ip地址库ipregion近期,全网关于显示ip属地的功能讨论比较热烈,听说让一些营销号博主现出了原型。作为一群被称为码农的技术人员,大大小小的产品经理老板们肯定又安排任务下来,头发又要少几根了,今天我们就
小巧便携的键鼠怎么配?只需200元就能轻松搞定现在笔记本成为我日常办公最常用的工具,有时间外出办公时,需要随身携带笔记本。键鼠作为电脑外设的标配,有时候因工作需要,携带笔记本时也要把键鼠带上,小巧轻便的键鼠套装对我来说是再好不
网页中如何实现点击按钮将文本复制到剪贴板?构建网站时经常会用到将文本复制到剪贴板的需求,下面是常用做法,兼容旧版浏览器。创建元素,将其值设置为要复制到剪贴板上的字符串。将元素附加到当前HTML文档并使用CSS将其隐藏以防止
粤省事APP上线可长按图标一键亮粤康码中新网广州5月13日电(记者程景伟)在广东省人民政府新闻办公室13日举行的新闻发布会上,作为广东省数字政府改革进入2。0建设阶段的一个标志性成果,粤省事APP正式发布上线。广东省在
全球最大重离子对撞机将上线据美国趣味科学网站5月10日报道,全球功率最大的重离子对撞机本周上线。报道说,研究人员5月初宣布,全球功率最大的重离子对撞机终于完工。它将产生新的奇异原子,并揭示恒星和超新星如何产
广东公安在粤省事App上线300项服务事项!七成全程网办5月13日,广东省政府新闻办粤省事App上线新闻发布会召开。会上,省公安厅二级巡视员张彬照介绍,近期,广东公安将粤省事小程序上线的公安政务服务事项全量迁移至粤省事App,总上线事项
Linux命令使用grep和egrep查找文件内容Linux中可以使用grep或者egrep命令用于在文件内查找指定的字符串。egrep执行效果与grepE相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串
微信悄悄上线新功能微信又有新功能啦再次冲上热搜最近,有小伙伴发现微信升级全新版本后增加了手机温度监控等新功能这个手机温度监控功能到底如何使用呢?打开微信后点击我设置找到下方帮助与反馈点击进入进入帮助
秦创原(国际)路演中心与多家公司签约助推科技成果转化近日,秦创原(国际)路演中心与陕西省创业投资协会开源证券签署战略合作协议,与深圳证券信息有限公司(科融通VNext)成功签署合作框架协议,助推陕西科技成果转化。秦创原(国际)路演中