学习spring的第三天
1.手动的依赖注入出了昨天所讲的利用<property>和<constructor-arg>标签设置注入外还可以通过属性值设置,这样就少些了一些代码。。。
1.1:直接在<bean>标签中打出c:或者p:,如果是IDEA就直接ALT+Enter会在<beans>中导入xmlns,当然手写也可以:
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
然后再在:后写上对应的(字段名="xx"或者c:_0,使用下标),例如,
<bean id="dataSource"
class="inject.namespace.MyDataSource" p:username="sa" c:url="url--" >
2.空值null的设置,Integer直接在=""中什么也不写就是null,但是时String类型就要使用标签<null>
3.parent属性:也就是引用另外一个<bean>,直接获取该<bean>中设置好的一系列注入。主要用处是:有多个同样属性的类时可以少写一些代码,可以位置防止这个工具<bean>被创建出实例,可以在其中加上属性abstract="true"。
3.1:为什么要防止被初始化:没什么别的原因,你愿意也可以。主要是<bean>必须要有class,如果被使用到了的话,就有可能会被初始化而已。
3.2:无论是parent还是abstract都是xml中的,和实际的java类没有关系,就像昨天的<set><list>和java中的类型无关,即使java不是Set,设置<set>后就会禁止重复值。
4. 自动装配,昨天的是手动依赖注入。使用一个在<bean>中的属性就行了:autowire,它一共有5个值可以设置,在这里只讲2个,分别是byType和byName.
4.1:byType,根据类型,也就是class属性。
4.2 :byName,这里的name是指类中的字段,但更准确来说的set方法后面的。(因为xx,其set方法可以写成setXy(xx),虽然这样不规范,但是name是指xy,spring中大部分都是反射这个set的,而不是直接取字段);然后注入就会寻找某个<bean>的id为该name的装配。
4.3: 有时候会出现多个<bean>有相同的类型而导致spring不知道自动装配哪个<bean>,因此可以通过2种属性设置,分别是primary,autowire-condidate,在不同的<bean>中分别设置这两个属相,primary="true"的优先级的大于autowire-condidate="true"的,但是对同一个<bean>同时设置这两个属性的值primary="true",autowire-condidate="false"会使另一个没有设置这两个任何一个值的,即最低优先级的<bean>被执行。但如果是primary="false",autowire-condidate="true",并且还有另一个相同类型的<bean>会导致报错,NoUniqueBeanDefinitionException。
4.3补充:可以在<beans>中设置默认属性,例子:其中第一个属性可以使用通配符(*是可以的,其他没试)
default-autowire-candidates="*dao" default-autowire="byType"
4.4:不会对Integer等类型进行自动装配,详见5.
5.自动装配的部分解释,对4的补充:自动装配是启动spring,spring就扫描了xml文件,spring就只道所有被它管理的bean,spring就可以通过反射获取其一系列信息。实例化就是调用构造函数,如果构造函数有依赖,spring就会尝试解决掉这个依赖是什么东西,从自己管理的<bean>中找。所以,当类型为Integer,Stirng之类,而不是类类型,由于spring没有管理,就不会自动装配。
6. 目前经过代码测试:发现即使类类型,但如果这个类里面有字段,就算在这个<bean>中配置了构造或者属性,自动装配的时候,字段的值它还是null。就是A类有字段B类,B类有字段A,即使在B的<bean> 中对A设置了值,但A的自动装配输出B的A是null。
学习spring的第三天的更多相关文章
- 深入浅出学习Spring框架(三):AOP 详解
AOP的英文解释——AOPAspect Oriented Programming面向切面编程.主要目的是通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. 在反 ...
- 深入学习Spring框架(三)- AOP面向切面
1.什么是AOP? AOP为 Aspect Oriented Programming 的缩写,即面向切面编程, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术..AOP是OOP的延续, ...
- 深入浅出学习Spring框架(四):IoC和AOP的应用——事务配置
在前文 深入浅出学习Spring框架(一):通过Demo阐述IoC和DI的优势所在. 深入浅出学习Spring框架(三):AOP 详解 分别介绍了Spring的核心功能——IoC和AOP,光讲知识远远 ...
- 跟着刚哥学习Spring框架--通过XML方式配置Bean(三)
Spring配置Bean有两种形式(XML和注解) 今天我们学习通过XML方式配置Bean 1. Bean的配置方式 通过全类名(反射)的方式 √ id:标识容器中的bean.id唯一. √ cl ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- 菜鸟学习Spring——60s配置XML方法实现简单AOP
一.概述. 上一篇博客讲述了用注解的形式实现AOP现在讲述另外一种AOP实现的方式利用XML来实现AOP. 二.代码演示. 准备工作参照上一篇博客<菜鸟学习Spring--60s使用annota ...
- 跟着刚哥学习Spring框架--创建HelloWorld项目(一)
1.Spring框架简介 Spring是一个开源框架,Spring是在2003年兴起的一个轻量级的开源框架,由Rod johnson创建.主要对JavaBean的生命周期进行管理的轻量级框架,Spri ...
- (转)Spring Boot 2 (三):Spring Boot 开源软件都有哪些?
http://www.ityouknow.com/springboot/2018/03/05/spring-boot-open-source.html 2016年 Spring Boot 还没有被广泛 ...
- Spring Boot 2 (三):Spring Boot 2 相关开源软件
Spring Boot 2 (三):Spring Boot 2 相关开源软件 一.awesome-spring-boot Spring Boot 中文索引,这是一个专门收集 Spring Boot 相 ...
随机推荐
- pip升级报错(权限问题)
今天跟新pip的时候错一个接一个 看到拒绝访问应该是权限的问题,想起安装的时候选择谁可以使用软件(大概是这样的一个选项),选择了“只有我”,选择所有用户应该就不会存在这个问题了,那么怎么解决呢? 敲黑 ...
- Subtitles
1. 字幕Subtitles 2. 字幕类型 3. 字幕格式 4. 常用文本字幕 5. 字幕编辑器 6. 字幕编辑器比较 1. 字幕Subtitles https://en.wikipedia.org ...
- IAR 设置问题
IAR 设置问题 1.worksplace 的设置问题:edit configuration 这样,每个工程都可以有一个workplace,方便切换. 2.文件夹包含问题 3.包含.dat文件问题 . ...
- laravel-url去掉public
把laravel/server.php改名为index.php 并且将public目录下的.htaccess拷贝到Larvael根目下 Ok了 but why? 自己查去吧
- 图解jvm--(一)jvm内存结构
jvm内存结构 1.程序计数器 1.1 定义 Program Counter Register 程序计数器(寄存器) 作用,记住下一条jvm指令的执行地址 特点 是线程私有的 (唯一)不会存在内存溢出 ...
- Day9 - J - 吉哥系列故事——恨7不成妻 HDU - 4507
单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 7+7=7*2 77=7 ...
- Time Series_2_Multivariate_TBC!!!!
1. Cointegration 2. Vector Autoregressive Model 3. Impulse-response Function 4. Volatility Modeling ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:快速浮动
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- JavaScript 转义字符
转义字符是字符的一种间接表示方式.在特殊语境中,无法直接使用字符自身.例如,在字符串中包含说话内容. "子曰:"学而不思则罔,思而不学则殆."" 由于 Java ...
- python编写的banner获取代码的两种方式
1.无选项和帮助信息 #!/usr/bin/env python #coding:utf-8 import socket import sys import os from threading imp ...