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 框架的核心基于控制反转原理. 什么是控制反转?控制反转是一种将组件依赖关系的创建和管理置于程序外部的技 ...
随机推荐
- ecs架构思考
系统管理者, ecs本身要处理的是遍历, 遍历结构处理事情. 而不同的场景要处理的事务是不一样的, 所以系统是要动态增加或者减少的. 而实体代表着一个真正的对象, 对象本身是复杂的, 拥有多种属性的. ...
- 记录一下安装hexo的过程
记录一下安装hexo的过程 首先你的电脑需要安装node.js和Git 安装好Git之后需要配置本机与Github之间的ssh方便更新同步博客到Github上,在一个地方新建一个文件夹作为我们博客的根 ...
- sqlilabs 1-20关 payload
1.联合查询注入:http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,user(),3 --+http://127.0.0.1/sqli/Less- ...
- Scrapy(五):CrawlSpider的使用
Scrapy(五):CrawlSpider的使用 说明 :CrawlSpider,就是一个类,是Spider的一个子类,也是一个官方类,因为是子类,所以功能更加的强大,多了一项功能:去指定的页面中来抓 ...
- cnn卷积理解
首先输入图像是28*28处理好的图. 第一层卷积:用5*5的卷积核进行卷积,输入为1通道,输出为32通道.即第一层的输入为:28*28图,第一层有32个不同的滤波器,对同一张图进行卷积,然后输出为32 ...
- HotSpot VM运行时
HotSpot VM运行时系统为HotSpot JIT编译器和垃圾收集器提供服务和通用API,同时还为VM提供启动.线程管理.JNI(Java本地接口)等基本功能.HotSpot VM运行时环境担当许 ...
- 机器学习 | SVD矩阵分解算法,对矩阵做拆分,然后呢?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题第28篇文章,我们来聊聊SVD算法. SVD的英文全称是Singular Value Decomposition,翻译过来 ...
- mdk/iar汇编区别
在代码移植中,经常遇到iar的代码转换问题,在此不间断记录一些,个人感觉还是IAR的更接近C一些,备查: 1. #ifdef的使用 // IAR #ifdef MACRO_XX #endif // M ...
- MultipartFile
转发:原博客 一.MultipartFile是什么? MultipartFile是一个接口并继承了InputStreamSource接口.MockMultipartFile.CommonsMultip ...
- vs code的使用(一) Format On Paste/Format On Save/ Format On Type
很多经典的问题可以搜索出来,但是一些很小的问题网上却没有答案 (这是最令人发狂的,这么简单,网上居然连个相关的信息都没有给出) (就比如我想保存后自动格式化,但网上的大部分都是如何取消保存后自动格式化 ...