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

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 {
    @Bean
    public 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. Spring boot注解(annotation)含义详解

    Spring boot注解(annotation)含义详解 @Service用于标注业务层组件@Controller用于标注控制层组件(如struts中的action)@Repository用于标注数 ...

  2. Spring Boot常用的注解以及含义<持续更新>

    1.@RestController和@RequestMapping注解 @RestController 和 @RequestMapping 注解是Spring MVC注解(它们不是Spring Boo ...

  3. spring mvc 注解 学习笔记(一)

    以前接触过spring,但是没有接触spring mvc 以及注解的应用,特习之,记之: 注解了解 @Component 是通用标注, @Controller 标注web控制器, @Service 标 ...

  4. Spring JSR-250注解

    Java EE5中引入了“Java平台的公共注解(Common Annotations for the Java Platform)”,而且该公共注解从Java SE 6一开始就被包含其中. 2006 ...

  5. atititt.java定时任务框架选型Spring Quartz 注解总结

    atititt.java定时任务框架选型Spring Quartz 总结 1. .Spring Quartz  (ati recomm) 1 2. Spring Quartz具体配置 2 2.1. 增 ...

  6. Spring入门注解版

    参照博文Spring入门一,以理解注解的含义. 项目结构: 实现类:SpringHelloWorld package com.yibai.spring.helloworld.impl; import ...

  7. 品Spring:注解终于“成功上位”

    历史还是抛弃了XML,当它逐渐尝到注解的甜头之后. 尤其是在Spring帝国,到处充满着注解的气息. 注解从一个提供附属信息的“门客”,蜕变为颇具中流砥柱的“君侯”. 注解成功登上了帝国的舞台,定会像 ...

  8. Spring MVC注解的一些案列

    1.  spring MVC-annotation(注解)的配置文件ApplicationContext.xml <?xml version="1.0" encoding=& ...

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

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...

  10. spring @condition 注解

    spring @condition注解是用来在不同条件下注入不同实现的 demo如下: package com.foreveross.service.weixin.test.condition; im ...

随机推荐

  1. 性能测试工具 - ab 简单应用

    之前知道一般网站性能可以通过 LoadRunner, JMeter, QTP 等相应的软件进行测试, 印象中本科学习 “软件测试” 这门课程时安装并使用过, LoadRunner等不是一个小软件, 安 ...

  2. 图的最小生成树——Prim算法

    Prim算法 Prim算法求最小生成树是采取蓝白点的思想,白点代表已经加入最小生成树的点,蓝点表示未加入最小生成树的点. 进行n次循环,每次循环把一个蓝点变为白点,该蓝点应该是与白点相连的最小边权的是 ...

  3. bzoj 1703 [Usaco2007 奶牛排名 传递闭包

    [Usaco2007 Mar]Ranking the Cows 奶牛排名 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 504  Solved: 343[ ...

  4. js命名

    JS变量名前加 _ 与 $ 的区别: 下划线一般当做私有属性, 业界会比较常用$开头作为框架.库的关键词前缀,目的是避免命名冲突

  5. Xcode 全局搜索失效的问题

    早上手一快不知点了什么,然后全局搜索的功能就不起作用了.百度了一下才知道,原来把搜索范围给改了,改回来如下:

  6. 1370 - Bi-shoe and Phi-shoe(LightOJ1370)(数论基础,欧拉函数)

    http://lightoj.com/volume_showproblem.php?problem=1370 欧拉函数: 在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. φ(n) ...

  7. Borg Maze-POJ3026(bfs+最小生成树)

    http://poj.org/problem?id=3026 如果一个一个普通搜处理不好的话会超时  可以连到一块搜 我觉得这个方法特别好 #include<stdio.h> #inclu ...

  8. 信号量学习 & 共享内存同步

    刚刚这篇文章学习了共享内存:http://www.cnblogs.com/charlesblc/p/6142139.html 里面也提到了共享内存,自己不进行同步,需要其他手段比如信号量来进行.那么现 ...

  9. Antivius for Linux

    http://www.clamav.net/   https://www.avast.com/zh-cn/linux-server-antivirus   http://www.f-prot.com/ ...

  10. hibernate查询之Criteria实现分页方法(GROOVY语法)

    public int searchTest(String name, Integer pageIndex, List<Test> resultList){ def criteria = T ...