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 框架的核心基于控制反转原理. 什么是控制反转?控制反转是一种将组件依赖关系的创建和管理置于程序外部的技 ...
随机推荐
- java 面向对象(四十二):反射(六)反射应用三:调用运行时类的指定结构
调用指定的属性: @Test public void testField1() throws Exception { Class clazz = Person.class; //创建运行时类的对象 P ...
- Django框架11 /form组件、modelForm组件
Django框架11 /form组件.modelForm组件 目录 Django框架11 /form组件.modelForm组件 1. form组件介绍 2. form常用字段与插件 3. form所 ...
- AcWing 93. 递归实现组合型枚举
AcWing 93. 递归实现组合型枚举 原题链接 从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案. 输入格式 两个整数 n,m ,在同一行用空格隔开. 输出格式 按照从小到大的 ...
- Python 实现邮件发送功能(初级)
在我们日常项目中,会经常使用到邮件的发送功能,如何利用Python发送邮件也是一项必备的技能.本文主要讲述利用Python来发送邮件的一些基本操作. 本章主要包含知识点: 邮件发送原理简述即常用smt ...
- LeetCode第4题:寻找两个有序数组的中位数
double Solution::findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) ...
- (5)webpack中url-loader的使用
为什么要使用url-loader 在前面已经介绍了css文件可以使用第三方loader去加载. 在一个项目中,也不仅仅只有html,js和css文件,还有图片文件,字体文件等等.当我们给一个css样式 ...
- python基础算法
一.简介 定义和特征 定义:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时 ...
- NVIDIA GPU Pascal架构简述
NVIDIA GPU Pascal架构简述 本文摘抄自英伟达Pascal架构官方白皮书:https://www.nvidia.com/en-us/data-center/resources/pasca ...
- JAVA 面向对象 三大特征:继承
什么是继承 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可. 多个类可以称为子类,单独这个类称为父类.超类或者基类. 子类可以直接访 ...
- 【week1错题集】
day9[2.f] # day9 题2.f ''' 有如下文件,t1.txt,里面的内容为: 葫芦娃,葫芦娃, 一根藤上七个瓜 风吹雨打,都不怕, 啦啦啦啦. 以r模式打开文件,从‘风吹雨打..... ...