注解形式配置应用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. JMM 内存模型 与 volatile 关键字

    内存模型 线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory). 本地内存中存储了该线程以读/写共享变量的副本. 不同线程之间无法相互 ...

  2. Android Android Studio 如何导出 Jar 给 Unity 使用

    大致步骤如下: 1.创建新的 Android Studio 工程 2.为此 Android Studio 工程创建 Android Library 类库(也就是一个 Module)(后面就是用它生成 ...

  3. delphi xe10 网络文件传送

    //网络传送文件(类似Server/Client) TTetheringManager|设备管理.TTetheringAppProfile|文件发送 待补充

  4. PHP ftp_rmdir() 函数

    定义和用法 The ftp_rmdir() 函数删除 FTP 服务器上的一个目录. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 ftp_rmdir(ftp_connectio ...

  5. NX二次开发-算法篇-找相切面

    方法1:通过判断相邻面公共边的光顺性来找相切面 1 #include <uf.h> 2 #include <uf_modl.h> 3 #include <uf_obj.h ...

  6. jvm-多线程

    多线程的目的 为什么要使用多线程?可以简单的分两个方面来说: 在多个cpu核心下,多线程的好处是显而易见的,不然多个cpu核心只跑一个线程其他的核心就都浪费了: 即便不考虑多核心,在单核下,多线程也是 ...

  7. 【JUC】JDK1.8源码分析之ConcurrentHashMap

    一.前言 最近几天忙着做点别的东西,今天终于有时间分析源码了,看源码感觉很爽,并且发现ConcurrentHashMap在JDK1.8版本与之前的版本在并发控制上存在很大的差别,很有必要进行认真的分析 ...

  8. HDU 5726 线段树+dp

    题意:给出一个序列,后q次询问,求给定区间gcd及整个序列有多少个序列的gcd和这个值相同 首先线段树维护区间gcd建树,之后预处理出每个gcd有多少个子序列,这时需要dp, dp[i][tmp]表示 ...

  9. HDU 2874 /// tarjan离线求森林里两点的距离

    题目大意: 在一个森林里 询问 u v 两点 若不能到达输出 "Not connected" 否则输出两点距离 https://blog.csdn.net/keyboarderqq ...

  10. WebApi 如何 优雅的 对 输入输出 解密加密

    原文:WebApi 如何 优雅的 对 输入输出 解密加密 这不是变态的想法, 这只是对现实需求的转化. 因为有密文, 所以本文不适用于浏览器到服务端的数据交换; 只适用于服务端到服务端的数据传输. 用 ...