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 框架的核心基于控制反转原理. 什么是控制反转?控制反转是一种将组件依赖关系的创建和管理置于程序外部的技 ...
随机推荐
- PCA算法 | 数据集特征数量太多怎么办?用这个算法对它降维打击!
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第27文章,我们一起来聊聊数据处理领域的降维(dimensionality reduction)算法. 我们都知道,图片 ...
- Python入门002
1.编程语言介绍 分类:机器语言汇编语言高级语言(编译型.解释型号) 总结:#1.执行效率:机器语言>汇编语言>高级语言(编译型>解释型) #2.开发效率:机器语言<汇编语言& ...
- 数据可视化之PowerQuery篇(十三)Power BI总计行错误,这个技巧一定要掌握
https://zhuanlan.zhihu.com/p/102567707 前一段介绍过一个客户购买频次统计的案例: Power BI 数据分析应用:客户购买频次分布. 我并没有在文章中显示总计行 ...
- Django框架07 /cookie和session
Django框架07 /cookie和session 目录 Django框架07 /cookie和session 1. django请求生命周期 2. cookie 3. session 4. 总结 ...
- C# Dictionary的底层实现解析
引用: https://www.cnblogs.com/InCerry/p/10325290.html 字典原理分析: 1.用数组存元素,元素的结构体存hashCode.next.key.value. ...
- ffmpeg源码编译环境搭建
ffmpeg是视频开发最常用到的开源软件,FFmpeg功能强大,用途广泛,提供几乎所有你能够想到的与视频开发相关的操作,许多商业软件都以ffmpeg为基础进行开发定制. FFmpeg: FFmpeg ...
- React js ReactDOM.render 语句后面不能加分号
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...
- day10:函数的实参&形参
函数的参数 (参数:配合函数运算的值)参数: (1)形参:形式参数,在函数的定义处 (2)实参:实际参数,在函数的调用处 形参: 普通形参(位置) , 默认形参 , 普通收集形参 ...
- mybatis sqlsession与sqlsquery、transaction、connection
sqlsession和connection 一个sqlsession一般对应一个connection,并且mybatis默认每次获取session都会开启一个事务,且不自动提交事务.如果更新操作完成后 ...
- CS231n 斯坦福李飞飞视觉识别课程
本文是个人在学习<CS231n 斯坦福李飞飞视觉识别课程>的学习笔记. 第一讲:课程简介 课时1 计算机视觉概述 课时2 计算机视觉历史背景 课时3 课程后勤 选读书籍<DeepLe ...