学习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 相 ...
随机推荐
- postgresql shell脚本传递参数并执行sql脚本并
参考: https://stackoverflow.com/questions/7389416/postgresql-how-to-pass-parameters-from-command-line ...
- @Qualifier
当一个接口,有多个实现类且均已注入到spring容器中了,使用时@AutoWired是byType的,而这些实现类类型都相同,此时就需要使用@Qualifier明确指定使用那个实现类.因此,@Qual ...
- Android 如何从系统图库中选择图片
转:http://blog.csdn.net/tody_guo/article/details/7560270 这几天我都在做Android的App,同时学习它的API,我将分享一些我学到的东西,比如 ...
- AngularJS1.X指令
<!DOCTYPE html> <html ng-app='myApp'> <head> <meta charset="utf-8"> ...
- 如何让图片在div里左右居中,上下居中
如何让图片在div里左右居中,上下居中 转载▼ 1.要想让图片左右对齐,我们可以在div里写入"style:text-align:center;"代码来实现. 2.要想使图片居 ...
- Linux环境安装Golang
命令行安装 yum install golang 默认安装目录/usr/lib/golang/ (不同系统不一样,可通过搜索golang关键字查找: find / -name golang) 卸载 ...
- LIS问题
LIS定义LIS(Longest Increasing Subsequence)最长上升子序列 .一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的. ...
- 苹果vs中国竞争者:瘦死的骆驼比马大?
前不久,苹果调整2019年第一财季的营收指引,预计第一季度毛利率为38%,相关收入大约为55亿美元,全年总体营收约为840亿美元,运营开支约为87亿美元.针对2019年的运营状况,库克亲自给投资者写了 ...
- springCloud 之 Eureka注册中心高可用配置
springCloud的eureka高可用配置方案思路是:几个服务中心之间相互注册,比如两个注册中心,A注册到B上,B注册到A上,如果是三个注册中心则是:A注册到BC上,B注册到AC上,C注册到AB上 ...
- Java虚拟机05.2(内存分配)
jdk1.7中堆内存分为:年轻代+老年代+永久代.但是永久代有作为非堆内存存在,也就是说堆内存的大小应该为年轻代+老年代.在tomcat容器中,如果jsp页面过多可能出现永久代溢出.通常栈溢出都是程序 ...