依赖注入,从字面上理解,即是:以注入的方式实现依赖;

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 各种注解(@)的含义与认识相关推荐

  1. java中spring的注解_spring中的各种注解解析

    Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@ ...

  2. spring的注解开发@Component @Bean @Value @Autowired、@Qualifier @PropertySource @Configuration

    spring的注解开发 启动注解功能 启动注解功能 ⚫ 启动注解扫描,加载类中配置的注解项 ⚫ 说明: ◆ 在进行包所扫描时,会对配置的包及其子包中所有文件进行扫描 ◆ 扫描过程是以文件夹递归迭代的形 ...

  3. java spring boot 注解验证_如何理解Java原生注解和Spring 各种注解?

    作者:digdeep .cnblogs.com/digdeep/p/4525567.html 导引 Spring中的注解大概可以分为两大类: spring的bean容器相关的注解,或者说bean工厂相 ...

  4. 超级详细的Spring Boot 注解总结

    日常编程中我相信大家肯定都用过spring,也用过spring的注解,哪怕面试的时候也经常会被问到一些spring和spring boot注解的作用和含义等,那么这篇就带大家来看看超级详细的Sprin ...

  5. 从源码深入理解Spring IoC 注解

    全注解下的 Spring IoC 本文基于 Spring Boot,所以并不使用 XML 配置,使用注解描述生成对象 版权声明:本文为博主原创文章,未经博主允许不得转载. Ioc 容器简介 Sprin ...

  6. spring 常用注解 原理 逻辑 代码演示

    01 spring 常用注解 原理 逻辑 代码演示 这是自己观看视频的笔记 文章目录 01 spring 常用注解 原理 逻辑 代码演示 一.组件注册 1.1-spring注解驱动开发 1.2-组件注 ...

  7. Spring——事务注解@Transactional【建议收藏】

    在某些业务场景下,如果一个请求中,需要同时写入多张表的数据或者执行多条sql,为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到事务:Spring框架下,我们经 ...

  8. 【Spring】spring基于注解的声明式事务控制

    结构 domin package com.itheima.domain;import java.io.Serializable;public class Account implements Seri ...

  9. Spring系列之Spring常用注解总结

    参看博客:https://www.cnblogs.com/xiaoxi/p/5935009.html 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺 ...

  10. 实践:使用Spring 原生注解来快速实现 策略模式 + 工厂模式

    作者:Richard_Yi juejin.im/post/5db0e910518825648f2ef355 前言 这阵子在做项目组重构的工作,工作中的一部分就是就目前代码库中与企业交互的逻辑抽离出来, ...

最新文章

  1. 快速筛选数据集中某列特征符合某种规律的所有数据集
  2. 17校招真题题集(3)11-15
  3. linux 树状结构图,linux下tree指令的用法, 树状图列出目录, 树状图逐级列出目录...
  4. Android高德地图自定义Markers的例子
  5. Android json数据解析及简单例子
  6. C# 获取UTC 转换时间戳为C#时间
  7. 网站正在建设中_网站建设中如何设计更能吸引用户
  8. echarts社区网址
  9. 解决loadrunner使用谷歌浏览器录制时打不开网页的问题
  10. 题目汇总(ACWing)
  11. 如何使用并且使用过滤器
  12. 《传送门》游戏中传送机制简析
  13. 使用原生JavaScript改变DOM元素面试题
  14. 中国通信服务股份有限公司之广通服的划分!
  15. 微信公众号支付宝授权
  16. ibatis入门教程
  17. 图像 引言 深度学习_深度学习算法对磁共振图像序列的识别
  18. java计算机毕业设计ssm网上报名系统
  19. Lumerical官方案例、FDTD时域有限差分法仿真学习(十四)——超透镜(Metalens)
  20. 1000桶水,其中一桶有毒,猪喝毒水后会在15分钟内死去,想用一个小时找到这桶毒水,至少需要几头猪?具体该如何实现方法讲解

热门文章

  1. 2年3个月推倒重来的决心 独立游戏《须弥•域》的涅槃之路
  2. arrays中copyof复制两个数组_Core Java - Arrays
  3. idea中 mybatis 的 mapper.xml 新建没有 头文件
  4. hadoop yarn如何启动聚合日志
  5. python classmethod_Python classmethod()
  6. Spring中的面向切面(AOP)
  7. 将n划分成最大数不超过m的划分数
  8. C/C++文件操作效率比较——FILE/fstream
  9. 真正的程序员(转贴)
  10. 鲸鲨阵列服务器怎么装系统,鲸鲨软件 | 自主可控IT基础架构产品及解决方案提供商...