Spring学习总结(1)-注入方式
Spring实现IOC的思路是提供一些配置信息用来描述类之间的依赖关系,然后由容器去解析这些配置信息,继而维护好对象之间的依赖关系,前提是对象之间的依赖关系必须在类中定义好,比如A.class中有一个B.class的属性,那么我们可以理解为A依赖了B。既然我们在类中已经定义了他们之间的依赖关系那么为什么还需要在配置文件中去描述和定义呢?
Spring官方文档地址:https://docs.spring.io/spring/docs/5.2.1.BUILD-SNAPSHOT/spring-framework-reference/core.html#beans-factory-class
Spring实现IOC的思路大致可以拆分成3点:
(1)应用程序中提供类,提供依赖关系(属性或者构造方法)
(2)把需要交给容器管理的对象通过配置信息告诉容器(xml、annotation,javaconfig)
(3)把各个类之间的依赖关系通过配置信息告诉容器
Spring的注入编码风格有三种,并且三种可以混合使用:
(1)schemal-based (实现方式:XML)
(2)annotation-based (实现方式:annotation注解)
(3)java-based (实现方式:configuration注解)
Spring的注入方法有2种:
构造方法、setter方法,在3.0版本时还有接口注入,因为不太人性化,后续的版本不推荐使用了。
1. schemal-based(XML)注入的两种方法:
1.1 构造方法注入
定义有参数的构造方法:
public class ThingThree {
public ThingThree(ThingOne thingOne, ThingTwo thingTwo){
// ...
}
}
XML定义注入:
<beans>
<bean id="thingOne" class="com.xxx.ThingOne"/>
<bean id="thingTwo" class="com.xxx.ThingTwo"/>
<bean id="thingThree" class="com.xxx.ThingThree">
<constructor-arg ref="thingOne"/>
<constructor-arg ref="thingTwo"/>
</bean>
</beans>
1.2 setter方法注入
定义Setter方法:
public class BeanOne {
private BeanTwo beanTwo;
public void setBeanTwo(BeanTwo beanTwo){
this.beanTwo = beanTwo;
}
}
XML定义注入:
<beans>
<bean id="beanOne" class="com.xxx.BeanOne"/>
<bean id="thingTwo" class="com.xxx.ThingTwo">
<property name="beanOne" ref="beanOne"/>
<bean>
</beans>
另外XML还可以注入基本属性,比如:
<beans>
<bean id="thingTwo" class="com.xxx.ThingTwo">
<property name="str" value="Hello World"/>
<bean>
</beans>
如果注入的属性在容器中已经存在,就可以用rel引用;如果不在容器中就用value引用值。bean还支持Map、List、Set的注入,但一般的不会用了。如果XML文件出现了p标签,代表了property,如果出现c标签,代表了constructor。
2. annotation-based (annotation注解)
bean使用的注解包括:@Component、@Repository、@Service、@Controller、@RestController,@Component是其他几个的父类
需要注入的类使用注解:@Autowired
使用annotation还不能独立使用,还需要开启注解,并在XML指定注解的扫描路径,因为Spring为了节省性能,默认是不开启注解的。
XML配置扫描路径:
<!-- 开启扫描功能,这个配置是Spring3.0版本才需要用 -->
<context:annotation-config></context:annotation-config>
<!-- 设置扫描路径、开启扫描,Spring4.0版本之后只用这一个就够了 -->
<context:component-scan base-package="com.xxx"/>
3. java-based(configuration注解)
在声明bean对象上使用注解:@Configuration
需要在bean类声明读取配置文件可以使用:@ImportResource("classpath:spring.xml")
bean上面设置组件扫描路径:@ComponentScan(basePackages = {"com.dxh.finance"})
下面这个其实是java-config、xml、annotation这3种方式混合使用的例子:
@Configuration
@ImportResource("classpath:spring.xml")
@ComponentScan(basePackages = {"com.dxh.finance"})
public class SpringConfig { @Bean
public UserBean getBean(){
return new UserBean();
}
}
Spring学习总结(1)-注入方式的更多相关文章
- spring ioc三种注入方式
spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容 ...
- spring四种依赖注入方式(转)
spring四种依赖注入方式!! 平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提 ...
- Spring 学习笔记 ----依赖注入
依赖注入 有三种方式,本文只学习下属性注入. 属性注入 属性注入即通过 setXxx方法()注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入方式是 ...
- spring四种依赖注入方式
一.Set注入 这是最简单的注入方式,假设有一个SpringAction,类中需要实例化一个SpringDao对象,那么就可以定义一个private的SpringDao成员变量,然后创建SpringD ...
- spring六种种依赖注入方式
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程 ...
- Spring IOC 三种注入方式
1. 接口注入 2. setter注入 3. 构造器注入 对象与对象之间的关系可以简单的理解为对象之间的依赖关系:A类需要B类的一个实例来进行某些操作,比如在A类的方法中需要调用B类 ...
- Spring学习笔记--依赖注入
依赖注入和控制反转:http://baitai.iteye.com/blog/792980出自李刚<轻量级 Java EE 企业应用实战> Java应用是一种典型的依赖型应用,它就是由一些 ...
- Spring IOC(DI)之注入方式
一次被问到IOC的注入方式,当时脑袋一阵混乱,不知道噻.于是google了一下,发现众说纷纭,有说三种的,有说四种的.都滚犊子吧,还是看看官方文档吧. DI exists in two major v ...
- Spring IOC三种注入方式(接口注入、setter注入、构造器注入)(摘抄)
IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转, Spring 框架的核心基于控制反转原理. 什么是控制反转?控制反转是一种将组件依赖关系的创建和管理置于程序外部的技 ...
随机推荐
- .net面试技术要点总结
[整理]待毕业.Net码农就业求职储备 本文题目来源于互联网,仅供即将从学校毕业的.Net码农(当然,我本人也是菜逼一个)学习之用.当然,学习了这些题目不一定会拿到offer,但是针对就业求职做些 ...
- 【转】Hbuilder配置Avalon、Vue指令提示
转载自CSDN http://blog.csdn.net/jianggujin/article/details/71419828 我本人是一名Java后端开发,偶尔也会研究一下前端内容,因为Hbuil ...
- 外部应用复制 表格 到word中 设置表格自适应
word 批量设置表格宽度自适应 描述 : 我们经常从 外部 如 excel,html 等其他文件 中复制的表格到word 文档 经常会出现在 word 中显示不全的问题 主要是源格式的表格 宽度比 ...
- 微服务架构中的BFF到底是啥?
在<技术中台与业务中台都是啥玩意>一文中留下一个问题:BFF是啥?为啥在API网关和业务中台之间加入了一层BFF?考虑到在实际工作中,我的大部分同事都问过这个问题,这里我也总结一下进行答复 ...
- celery 基础教程(五):守护进程
一 守护进程方式启动 https://blog.csdn.net/p571912102/article/details/82735052 文件目录如下 . ├── config.py ├── main ...
- web 部署专题(五):nginx 安装(一) 树莓派
1.安装Nginx sudo apt-get install nginx 2.启动Nginx sudo /etc/init.d/nginx start 3.测试安装是否成功(nginx默认是80端口) ...
- vue : watch、computed、以及对象数组
watch和computed是vue框架中很重要的特性. 那么,他们是怎么作用于对象数组的? 今天我们就来探究一下. 上代码. <template> <div class=" ...
- 设计模式:abstract factory模式
含义:抽象工厂将“抽象零件”组装成“抽象产品” 理解:相比于工厂方法模式,可以根据不同的接口创建不同的产品,说白了就是将一个接口变成两个接口,各自返回不同的抽象产品 例子: class Car //抽 ...
- Docker 基础知识 - 使用绑定挂载(bind mounts)管理应用程序数据
绑定挂载(bind mounts)在 Docker 的早期就已经出现了.与卷相比,绑定挂载的功能有限.当您使用绑定挂载时,主机上的文件或目录将挂载到容器中.文件或目录由其在主机上的完整或相对路径引用. ...
- 使用queue 做一个分布式爬虫(一)
这个作为调配的 taskMaster.py #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/12/23 15:21 # @au ...