Spring IOC基础回顾 — 组件扫描和装配
注解形式配置应用IOC
在类定义、方法定义、成员变量定义前使用,格式:@注解标记名
理解与回顾:
使用Spring IOC 管理对象(定义bean、bean的控制(scope/init-method等属性))及对象关系(DI: set注入/构造器注入)。
控制反转:改变了对象获取方式。 new方式获取 --> spring容器创建对象之后注入进来使用。降低了耦合。
1. 组件自动扫描
指定包路径,将包下所有组件进行扫描,组件类定义前有注解标记则会扫描到Spring容器。
基于注解的组件扫描方式:
- 开启组件扫描
spring.xml
...
<context:component-scan base-package="org.***" />
...
- 组件前添加注解
- 扫描标记注解:
@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基础回顾 — 组件扫描和装配的更多相关文章
- spring(一):spring的基础以及组件
spring简介 spring是一种开源轻量级框架,是为了解决企业应用程序复杂性而创建的 spring是企业应用开发的“一站式”框架,致力于为javaEE应用的各层(表现层.业务层.持久层)开发提供解 ...
- Spring - 基于注解的组件扫描
关于Spring的书籍都会花很大篇幅来讲解Spring如何注入各种bean的问题,非常令人头疼,自己在工作中还从来没有用到过. 所以就要跳过那些篇章,直接学习基于注解的组件扫描. 发现spring2是 ...
- Spring IOC基础
2.1.1 IOC是什么IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的 ...
- [spring] Ioc 基础
Ioc的理解:调用类对某一接口的实现类的依赖关系又第三方注入,以移除调用类对接口实现类的依赖.又叫做依赖注入.调用者对接口的选择权利被剥夺,交给了第三方.举个例子,学生本来可以选择哪个老师给他上课的, ...
- Spring IOC基础使用
先下载.导入核心jar包 编写Book类和CollectionUse类 package MyPackageOne; public class Book { private String title; ...
- Spring学习笔记之 Spring IOC容器(二) 之注入参数值,自动组件扫描方式,控制Bean实例化方式,使用注解方式
本节主要内容: 1. 给MessageBean注入参数值 2. 测试Spring自动组件扫描方式 3. 如何控制ExampleBean实例化方式 4. 使用注解方式重构Jdb ...
- Spring IOC容器装配Bean_基于注解配置方式
bean的实例化 1.导入jar包(必不可少的) 2.实例化bean applicationContext.xml(xml的写法) <bean id="userDao" cl ...
- Spring IOC 常用的注解
一.@Bean 1.配置类 @Configuration public class MainConfig { @Bean public Person person(){ return new Pers ...
- Spring学习03(Bean的自动装配)
6.Bean的自动装配 6.1 自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring中bean的三种装配机 ...
随机推荐
- vue组件的调用方式
vue中一般都会把公共内容作为一个组件去布局,但是如何引用自定义的组件呢?下面就是vue调用自定义组件的方式,主要代码如下: <template> <div> <span ...
- 使用osgearth2.9 rex引擎在Qt中黑屏的问题修复
将osgUtil::RenderStage.cpp中的下列红色代码注释重新编译即可: if ( !colorAttached ) { setDrawBuffer( GL_NONE, true ); s ...
- js数据访问的艺术
数据访问js无时不刻所要做的事情,提高对数据的访问效率对一般的小的程序来说,对性能并不会有明显的改善.但是对像淘宝这样项目巨大,访问量巨大的网站来说,一个数据访问效率的提高对性能来说可能产生很大提升. ...
- parseFloat 和 Number isNaN 转换
parseFloat(true) // NaN Number( parseFloat(null) // NaN Number( parseFloat('') // NaN Number('') par ...
- JUC 一 CyclicBarrier 与 Semaphore
java.util.concurrent CyclicBarrier简介 CyclicBarrier:可重用屏障/栅栏 类似于 CountDownLatch(倒计数闭锁),它能阻塞一组线程直到某个事件 ...
- thinkphp 类的扩展
ThinkPHP的类库主要包括公共类库和应用类库,都是基于命名空间进行定义和扩展的.只要按照规范定义,都可以实现自动加载. 大理石平台价格 公共类库 公共类库通常是指ThinkPHP/Library目 ...
- 57 c++ 读取二进制文件: 以.raw后缀的TDF_Voxel_Size文件为例
0 引言 毕业设计中用到了.raw格式的文件,需要将该文件按照M*N*P的矩阵格式加载到内存中.采用 #include <fstream> 中的FILE* 加载,并针对数据占用字节数,以 ...
- paper 15 :整理的CV代码合集
这篇blog,原来是西弗吉利亚大学的Li xin整理的,CV代码相当的全,不知道要经过多长时间的积累才会有这么丰富的资源,在此谢谢LI Xin .我现在分享给大家,希望可以共同进步!还有,我需要说一下 ...
- 8、collection
collection 可以理解为一个容器 组织业务逻辑 导入导出 监控或者mock server 实例: 1.新建一个collection,命名为v2ex 2.保存1个请求到v2ex 3.选中v2ex ...
- spark SQL之Catalog API使用
Catalog API简介 Spark中的DataSet和Dataframe API支持结构化分析.结构化分析的一个重要的方面是管理元数据.这些元数据可能是一些临时元数据(比如临时表).SQLCont ...