注解形式配置应用IOC

在类定义、方法定义、成员变量定义前使用,格式:@注解标记名

理解与回顾

使用Spring IOC 管理对象(定义bean、bean的控制(scope/init-method等属性))及对象关系(DI: set注入/构造器注入)。

控制反转:改变了对象获取方式。 new方式获取 --> spring容器创建对象之后注入进来使用。降低了耦合。

1. 组件自动扫描

指定包路径,将包下所有组件进行扫描,组件类定义前有注解标记则会扫描到Spring容器。

基于注解的组件扫描方式:

  1. 开启组件扫描
spring.xml
...
<context:component-scan base-package="org.***" />
...
  1. 组件前添加注解
  • 扫描标记注解:

    @Component //其他组件

    @Controller //控制层

    @Service //业务层组件 xxxService

    @Repository //数据访问层组件 xxxDao
  • 对象管理注解:

    @Scope

    @PostConstruct

    @PreDestroy
  • 举例:
@Component("idName")  //扫描ExampleBean 组件,默认id=exampleBean
//@ComponentScan // 注解方式开启组件扫描
@Scope("singleton") // 等价于<bean scope="">,默认单例。
public class ExampleBean {
@PostConstruct //等价于<bean init-method="" >
public void init() {
System.out.println("初始化逻辑");
} @PreDestroy // 等价于<bean destroy-method="" >
public void destroy() {
System.out.println("释放资源,释放spring容器对象资源,触发单例对象的destroy-method");
} public void excute() {
System.out.println("do sth");
}
}

2. 组件依赖:为bean添加注解,实现自动注入

  • @Resource:由JDK提供,可以定义在变量前或者setXXX方法前。

  • @Autowired:由Spring提供,可以定义在变量前或者setXXX方法前。

    二者都可以实现注入,不存在多个匹配类型,使用Resource和Autowired都可以。

    如果存在多个匹配类型,可以按名称注入:

    @Resource(name="指定名称") 或

    @Autowired

    @Qualifier("指定名称")

  • 举例:

@Component
public class Student {
//需要调用Computer和Phone对象
@Autowired
private Computer c; //注入Computer对象
//使用注解set方法也可省略,xml的配置方式不能省略(set注入方式)
//public void setC{
// this.c = c;
//}
@Autowired(required=false) // 设置required属性为false,会尝试自动注入,若没有匹配的bean,则未注入,p仍为null。
//@Qualifier("p") //指定名称注入
private Phone p; //注入Phone对象
...
}
  • @Autowired或@Resource是对象的注入,简单值可以用@Value("#{id.key}")注入(表达式注入)。

    举例:

    xxx.properties
username=root
password=123456

spring.xml

<util:properties id="db"  location="classath:xxx.properties">
</util:properties>

3. Spring IOC应用小结

三种配置方案:1. xml中显示配置; 2. java中显示配置; 3. 组件扫描,自动注入。

自己写的组件用简洁的注解方式自动注入(装配)即可;

第三方组件无法在其类上添加@Component和@AutoWired注解,必须用XML或JavaConfig 显式配置。

总之,以注入方式成全对象依赖关系,实现了组件解耦。

Spring IOC基础回顾 — 组件扫描和装配的更多相关文章

  1. spring(一):spring的基础以及组件

    spring简介 spring是一种开源轻量级框架,是为了解决企业应用程序复杂性而创建的 spring是企业应用开发的“一站式”框架,致力于为javaEE应用的各层(表现层.业务层.持久层)开发提供解 ...

  2. Spring - 基于注解的组件扫描

    关于Spring的书籍都会花很大篇幅来讲解Spring如何注入各种bean的问题,非常令人头疼,自己在工作中还从来没有用到过. 所以就要跳过那些篇章,直接学习基于注解的组件扫描. 发现spring2是 ...

  3. Spring IOC基础

    2.1.1 IOC是什么IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的 ...

  4. [spring] Ioc 基础

    Ioc的理解:调用类对某一接口的实现类的依赖关系又第三方注入,以移除调用类对接口实现类的依赖.又叫做依赖注入.调用者对接口的选择权利被剥夺,交给了第三方.举个例子,学生本来可以选择哪个老师给他上课的, ...

  5. Spring IOC基础使用

    先下载.导入核心jar包 编写Book类和CollectionUse类 package MyPackageOne; public class Book { private String title; ...

  6. Spring学习笔记之 Spring IOC容器(二) 之注入参数值,自动组件扫描方式,控制Bean实例化方式,使用注解方式

     本节主要内容:    1. 给MessageBean注入参数值    2. 测试Spring自动组件扫描方式    3. 如何控制ExampleBean实例化方式    4. 使用注解方式重构Jdb ...

  7. Spring IOC容器装配Bean_基于注解配置方式

    bean的实例化 1.导入jar包(必不可少的) 2.实例化bean applicationContext.xml(xml的写法) <bean id="userDao" cl ...

  8. Spring IOC 常用的注解

    一.@Bean 1.配置类 @Configuration public class MainConfig { @Bean public Person person(){ return new Pers ...

  9. Spring学习03(Bean的自动装配)

    6.Bean的自动装配 6.1 自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring中bean的三种装配机 ...

随机推荐

  1. Stack&Heap的理解

    Heap(堆):在英文中有杂乱的堆意思,意译中文为堆:其特点为先进先出. 堆空间分配:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表. Stack(栈):在英 ...

  2. 43. 守护线程 和 join方法

    1.守护线程(后台线程):            我们在使用一款软件的时候,有的软件会让我们在不知道的情况下下载一些东西,那么这个就是后台线程.            一般用于提高软件的下载量(也就是 ...

  3. 单源最短路径问题1 (Bellman-Ford算法)

    /*单源最短路径问题1 (Bellman-Ford算法)样例: 5 7 0 1 3 0 3 7 1 2 4 1 3 2 2 3 5 2 4 6 3 4 4 输出: [0, 3, 7, 5, 9] */ ...

  4. SQL SERVER中[dbo]的解释

    1.作用: (1)DBO是每个数据库的默认用户,具有所有者权限,即DbOwner:通过用DBO作为所有者来定义对象,能够使数据库中的任何用户引用而不必提供所有者名称.(2)至于为什么要使用所有者进行限 ...

  5. Django -- 高级知识点

    Django -- 高级知识点 高级知识点包括: 静态文件处理 中间件 上传图片 Admin站点 分页 使用jquery完成ajax 管理静态文件 项目中的CSS.图片.js都是静态文件 配置静态文件 ...

  6. NX二次开发-UFUN批量操作图层状态UF_LAYER_set_many_layers_status

    NX11+VS2013 #include <uf.h> #include <uf_ui.h> #include <uf_layer.h> UF_initialize ...

  7. 3. Image Structure and Generation

    名词 Extensible Linking Format(ELF) 3.1 The structure of an ARM ELF image ARM ELF映像包含sections, regions ...

  8. AtCoder ABC 126F XOR Matching

    题目链接:https://atcoder.jp/contests/abc126/tasks/abc126_f 题目大意 给定两个整数 M 和 K ,用小于 2M 的的所有自然数,每个两个,用这些数排成 ...

  9. ElasticSearch 索引查询使用指南

    1.检测集群是否健康,我们通常用下面的命令.确保9200端口号可用: http://localhost:9200/_cat/health?v 或者 http://localhost:9200/_clu ...

  10. Firefox Developer Edition 是专为开发者设计

    Firefox Developer Edition 当前是基于 Firefox 35.0a2,这款全新的浏览器包括内建调试功能,集成类似于Firefox火狐工具适配器的专用工具,并在浏览器当中内建We ...