Spring 各种注解(@)的含义与认识
依赖注入,从字面上理解,即是:以注入的方式实现依赖;
Spring 容器负责创建应用程序中的 bean,并通过 DI(依赖注入)来协调这些对象之间的关系。当描述 bean 如何进行装配(autowired)时,Spring 具有强大的灵活性,提供了以下三种主要的装配机制:
- 在 XML 中显式配置;
- 在 Java 中进行显式配置;
- XXConfig(JavaConfig)
隐式的 bean 发现机制和自动装配;
组件扫描(Component scanning):Spring 会自动发现应用上下文中所创建的 bean;
- 使用 @Component 注解(annotation)
- 默认是不扫描的;
- 自动装配(autowiring):Spring 自动满足 bean 之间的依赖;
0. basics
https://blog.csdn.net/zhang854429783/article/details/6785574
- 属性加上@Autowired后不需要getter()和setter()方法,Spring也会自动注入。
@Component、@Repository、@Service、@Controller
- @Service用于标注业务层组件
- @Controller用于标注控制层组件(如struts中的action)
- @Repository用于标注数据访问组件,即DAO组件
- @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Service public class VentorServiceImpl implements iVentorService { } @Repository public class VentorDaoImpl implements iVentorDao { }
<context:component-scan base-package=”com.eric.spring”>
component-scan标签默认情况下自动扫描指定路径下的包(含所有子包),将带有@Component、@Repository、@Service、@Controller标签的类自动注册到spring容器。
接口存在多个实现类的时候必须使用@Qualifier指定注入哪个实现类,否则(只有一个实现类)可以省略,只写@Autowired。
@Autowired @Qualifier("chinese") private Man man;
1. @Bean
@Bean 注解将会告诉 Spring 其修饰的方法将会返回一个对象,该方法要注册为 Spring 应用上下文的 bean。
@Bean public Base getDerived() {return new Derived(); }
默认情况(default)下,bean 的 ID 与带有 @Bean 注解的方法名保持一致。上述代码中,bean 的名字将会是 getDerived,当然也可以指定其他名字:
@Bean(name="anotherName") ...
2. @Configuration
@Configuration, 与 XML 文件描述配置不同,Spring 还支持使用 Java 代码描述配置,这里的 java 类需要被 @Configuration 修饰。
<?xml ...> <bean id="knight" class="....BraveKnight"><constructor-arg ref="quest" /> </bean><bean id="quest" class="...SlayDragonQuest"><constructor-arg value="#{T(System.out)}" /> </bean>
上述 xml 可简单理解为:
knight() ⇒ new BraveKnight(quest()); quest() ⇒ new SlayDragonQuest(System.out);
使用 Java 来描述配置:
@Configuration public class KnightConfig {@Beanpublic Knight knight() {return new BraveKnight(quest());}@Bean public Quest quest() {return new SlayDragonQuest(System.out);} }
3. @Component 与 @ComponentScan
- @Component,由该注解修饰的类,表明该类会作为组件类,并告知 Spring 为这个类创建 bean;
组件扫描默认是不开启的,需要显示配置 Spring,以命令其去寻找带有 @Component 注解的类,有如下两种配置方式:
- 配置文件:
<?xml version="1.0" encoding="UTF-8" ?> <beans><context:component-scan base-package="com.spring.jdbc"/> </beans>
- 同一包下,由 @ComponentScan 修饰的类;
4. @Import
运用的时候需要获取某类对应的bean,此时就需要用到@Import注解。
// 先创建两个类,不注入到 IOC 容器,,在应用的时候在导入到当前容器中。 public class Dog {} public class Cat {}@ComponentScan @Import({Dog.class, Cat.class}) public class App {public static void main(String[] args) throws Exception {ConfigurableApplicationContext context = SpringApplication.run(App.class, args);System.out.println(context.getBean(Dog.class));System.out.println(context.getBean(Cat.class));context.close();} }
Spring 各种注解(@)的含义与认识相关推荐
- java中spring的注解_spring中的各种注解解析
Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@ ...
- spring的注解开发@Component @Bean @Value @Autowired、@Qualifier @PropertySource @Configuration
spring的注解开发 启动注解功能 启动注解功能 ⚫ 启动注解扫描,加载类中配置的注解项 ⚫ 说明: ◆ 在进行包所扫描时,会对配置的包及其子包中所有文件进行扫描 ◆ 扫描过程是以文件夹递归迭代的形 ...
- java spring boot 注解验证_如何理解Java原生注解和Spring 各种注解?
作者:digdeep .cnblogs.com/digdeep/p/4525567.html 导引 Spring中的注解大概可以分为两大类: spring的bean容器相关的注解,或者说bean工厂相 ...
- 超级详细的Spring Boot 注解总结
日常编程中我相信大家肯定都用过spring,也用过spring的注解,哪怕面试的时候也经常会被问到一些spring和spring boot注解的作用和含义等,那么这篇就带大家来看看超级详细的Sprin ...
- 从源码深入理解Spring IoC 注解
全注解下的 Spring IoC 本文基于 Spring Boot,所以并不使用 XML 配置,使用注解描述生成对象 版权声明:本文为博主原创文章,未经博主允许不得转载. Ioc 容器简介 Sprin ...
- spring 常用注解 原理 逻辑 代码演示
01 spring 常用注解 原理 逻辑 代码演示 这是自己观看视频的笔记 文章目录 01 spring 常用注解 原理 逻辑 代码演示 一.组件注册 1.1-spring注解驱动开发 1.2-组件注 ...
- Spring——事务注解@Transactional【建议收藏】
在某些业务场景下,如果一个请求中,需要同时写入多张表的数据或者执行多条sql,为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到事务:Spring框架下,我们经 ...
- 【Spring】spring基于注解的声明式事务控制
结构 domin package com.itheima.domain;import java.io.Serializable;public class Account implements Seri ...
- Spring系列之Spring常用注解总结
参看博客:https://www.cnblogs.com/xiaoxi/p/5935009.html 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺 ...
- 实践:使用Spring 原生注解来快速实现 策略模式 + 工厂模式
作者:Richard_Yi juejin.im/post/5db0e910518825648f2ef355 前言 这阵子在做项目组重构的工作,工作中的一部分就是就目前代码库中与企业交互的逻辑抽离出来, ...
最新文章
- 快速筛选数据集中某列特征符合某种规律的所有数据集
- 17校招真题题集(3)11-15
- linux 树状结构图,linux下tree指令的用法, 树状图列出目录, 树状图逐级列出目录...
- Android高德地图自定义Markers的例子
- Android json数据解析及简单例子
- C# 获取UTC 转换时间戳为C#时间
- 网站正在建设中_网站建设中如何设计更能吸引用户
- echarts社区网址
- 解决loadrunner使用谷歌浏览器录制时打不开网页的问题
- 题目汇总(ACWing)
- 如何使用并且使用过滤器
- 《传送门》游戏中传送机制简析
- 使用原生JavaScript改变DOM元素面试题
- 中国通信服务股份有限公司之广通服的划分!
- 微信公众号支付宝授权
- ibatis入门教程
- 图像 引言 深度学习_深度学习算法对磁共振图像序列的识别
- java计算机毕业设计ssm网上报名系统
- Lumerical官方案例、FDTD时域有限差分法仿真学习(十四)——超透镜(Metalens)
- 1000桶水,其中一桶有毒,猪喝毒水后会在15分钟内死去,想用一个小时找到这桶毒水,至少需要几头猪?具体该如何实现方法讲解
热门文章
- 2年3个月推倒重来的决心 独立游戏《须弥•域》的涅槃之路
- arrays中copyof复制两个数组_Core Java - Arrays
- idea中 mybatis 的 mapper.xml 新建没有 头文件
- hadoop yarn如何启动聚合日志
- python classmethod_Python classmethod()
- Spring中的面向切面(AOP)
- 将n划分成最大数不超过m的划分数
- C/C++文件操作效率比较——FILE/fstream
- 真正的程序员(转贴)
- 鲸鲨阵列服务器怎么装系统,鲸鲨软件 | 自主可控IT基础架构产品及解决方案提供商...