学习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 相 ...
随机推荐
- web应用基础架构
1.web中间件 中间件是一类连接软件组件和应用的计算机软件,它包括一组服务.以便运行在一台或多台服务器上的多个软件通过网络进行交互.该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常 ...
- 099、Java中String类之字符数组与字符串的转换
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- scikit_learn (sklearn)库中NearestNeighbors(最近邻)函数的各参数说明
NearestNeighbors(n_neighbors=5, radius=1.0, algorithm='auto', leaf_size=30, metric='minkowski', p=2, ...
- javascript 在页面不刷新的情况下 其中的变量时不会被初始化的
因此可以根据这个原理做出一些效果,例如 <html> <head> <meta charset="utf-8" /> ...
- 十三: 悲观锁&乐观锁:解决丢失更新问题
悲观锁:认为丢失更新一定会出现,可以在查询的时候加入for update 认为丢失更新一定会出现,查询时: select * from account for update;for update : ...
- JavaScript 文件延迟和异步加载
JavaScript 文件延迟和异步加载 -般情况下,在文档的 <head> 标签中包含 JavaScript 脚本,或者导入的 JavaScript 文件. 这意味着必须等到全部 Jav ...
- 51nod 1445:变色DNA 最短路变形
1445 变色DNA 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 有一只特别的狼,它在每个夜晚会进行变色,研究发现 ...
- C++面试常见问题——17类模板的使用
类模板的使用 注意在每次类模板函数时都需要声明一个类模板 #include<iostream> using namespace std; template <class T,int ...
- jenkins#自动构建并部署springboot的jar包
1.GitLab 8.0.0(版本比较低,配置比较简单) 配置 点击项目 --> settings --> web Hooks 2.jenkins配置
- Java提升三:函数式接口
1. 定义 函数式接口即是有且仅有一个抽象方法的接口. 注意: (1)函数式接口只对于抽象方法有要求,对于接口中的默认方法,静态方法,私有方法数量并不作特殊要求. (2)既然函数式接口定义了抽象方法, ...