javaSpring学习总结day_01
本文章用于总结自己学习知识,有不足或错误之处清谅解。
bean.xml 文件的读取方式:
ClassPathXmlApplicationContext: 它是只能加载类路径下的配置文件 推荐
1.加载配置文件:
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
2.根据bean的id获取对象
ICustomerService cs1 = (ICustomerService) ac.getBean("customerService");
FileSystemXmlApplicationContext: 它是可以加载磁盘任意位置的配置文件
Bean创建的两种规则:
BeanFactory:
提供的是一种延迟加载思想来创建bean对象。即:bean对象什么时候用,什么时候创建
ApplicationContext:
提供的是一种立即加载思想来创建bean对象。即:只要一解析完配置文件,就创建bean对象
1.获取容器
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
2.根据bean的id获取对象
ICustomerService cs1 = (ICustomerService) ac.getBean("customerService");
cs1.saveCustomer();
Bean的作用范围:
它是可以通过配置的方式来调整作用范围
配置的属性:bean标签的scope属性
取值:
singleton :单例的(默认值)
prototype :多例的(当我们让spring接管struts2的action创建时,action必须配置此值)
request :作用范围是一次请求,和当前请求的转发
session :作用范围是一次会话
globalsession :作用范围是一次全局会话
Bean的生命周期:
设计bean标签的两个属性:
init-method
destroy-method
单例:
出生:容器创建,对象出生
活着:只要容器在,对象就在
死亡:容器销毁,对象消亡
多例:
出生:每次使用时,创建对象
活着:只要对象在使用中,就一直活着
死亡:当对象长时间不使用,并且也没有别的对象引用时,由java的垃圾回收器回收
Bean的三种创建方式:
第一种方式:调用默认无参构造函数创建 常用
默认情况下,如果没有默认无参构造函数,则创建失败,会报异常 bean.xml中配置:
<bean id="customerService" class="spring.service.impl.CustomerServiceImpl"></bean>
第二种方式:使用静态工厂中的方法创建对象
需要使用bean标签的factory-method属性,指定静态工厂中创建对象的方法
配置使用静态工厂创建bean对象
使用class中的factory-method创建对象,用id来提取 bean.xml中配置:
<bean id="staticCustomerService" class="spring.factory.staticFactory" factory-method="getCustomerService"></bean>
staticFactory.java中配置:
public static ICustomerService getCustomerService(){ return new CustomerServiceImpl();
第三种方式:使用示例工厂中的方法创建.
需要使用bean标签的factory-method属性,指定示例工厂中创建对象的方法
配置使用实例工厂创建bean对象
bean.xml中配置:
<bean id="instanceFactory" class="spring.factory.instanceFactory"></bean>
<bean id="instanceCustomerService" class="spring.factory.instanceFactory" factory-method="getCustomerService"></bean> instanceFactory.java中配置:
public static ICustomerService getCustomerService(){ return new CustomerServiceImpl(); }
Spring的依赖注入方式:
注入的方式有三种:
第一种:使用构造函数注入
第二种:使用set方法注入
第三种:使用注解注入 使用构造函数注入:
涉及的标签:constructor-arg
标签的属性:
type: 指定参数的类型
index: 指定参数的索引位置,从0开始
name: 指定参数的名称 (常用)
========上面三个属性是指定给哪个参数赋值的,下面两个属性是指定赋什么值的========
value: 指定基本数据类型或String类型的数据
ref: 指定其他bean类型数据
标签出现的位置:bean标签内部
bean.xml中的配置:
<bean id="customerService" class="spring.service.impl.CustomerServiceImpl">
<constructor-arg name="driver" value="com.mysql.jdbc.Driver"></constructor-arg>
<constructor-arg name="port" value="3306"></constructor-arg>
<constructor-arg name="today" ref="now"></constructor-arg>
</bean>
由于上文的配置使用了ref,所以需要在bean.xml中配置ref所用的类型:
<bean id="now" class="java.util.Date"></bean>
使用set方法注入:
涉及的标签:property
标签的属性:
name: 指定参数的set方法名称
value: 指定基本数据类型或String类型的数据
ref: 指定其他bean类型数据
标签出现的位置:bean标签内部
注意:使用set方法注入需要注入的目标拥有set方法,否则配置会出现错误。(spring注入错误可以先检查这里)
bean.xml中文件配置:
<bean id="customerService" class="spring.service.impl.CustomerServiceImpl">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="port" value="3307"></property>
<property name="today" ref="now"></property>
</bean>
<bean id="now" class="java.util.Date"></bean> CustomerServiceImpl.java中需要有:
public void setDriver(String driver) { this.driver = driver; }
public void setPort(Integer port) { this.port = port; }
public void setToday(Date today) { this.today = today; }
使用注解注入:在day_02中介绍 数据类型的注入:
注入的数据类型有3类:
第一类:基本类型和String类型
第二类:其他bean类型(必须是在spring的配置文件中出现过的bean)
第三类:复杂类型(集合类型)
<bean id="customerService" class="spring.service.impl.CustomerServiceImpl">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="port" value="3307"></property>
<property name="today" ref="now"></property>
</bean>
<bean id="now" class="java.util.Date"></bean>
如上例中:value则是属于第一类中的String类型,ref中则是第二类,由于ref是其他bean类型,所以需要在下面配置ref中now这个bean类型。
第三类:复杂类型的注入
结构相同,标签可以互换
如:map和properties可以互换
list,array,set可以两两交换
<bean id="customerService" class="spring.service.impl.CustomerServiceImpl">
<property name="myStrs">
<array>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</array>
</property> <property name="myList">
<list>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</list>
</property> <property name="mySet">
<set>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</set>
</property> <property name="myMap">
<map>
<entry key="testD" value="DDD"></entry>
<entry key="testE">
<value>EEE</value>
</entry>
<!--上面两种表示方法都可以-->
</map>
</property> <property name="myProps">
<props>
<prop key="testF">FFF</prop>
<prop key="testG">GGG</prop>
</props>
</property>
</bean> 交换标签后 <property name="myStrs">
<list>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</list>
</property> <property name="myList">
<array>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</array>
</property> <property name="myMap">
<map>
<props>
<prop key="testF">FFF</prop>
<prop key="testG">GGG</prop>
</props>
</map>
</property> <property name="myProps">
<entry key="testD" value="DDD"></entry>
<entry key="testE">
<value>EEE</value>
</entry>
</property>
javaSpring学习总结day_01的更多相关文章
- Java学习笔记day_01
Java学习笔记(复习整理) 虽然不知道该怎么写,但是不起步就永远不知道该怎么做..刚开始可能会写的很差劲,但会一点一点变好的. 本笔记是以我按照传智播客的视频和Java核心思想来学习,前面的基础部分 ...
- javaSpring学习总结day_02
使用注解注入: 1.用于创建bean对象 @Component: 作用:相当于配置了一个bean标签 位置:类上面 属性:value,含义是bean的id,当不写时,有默认值,默认值是当前类的短名,首 ...
- JavaSpring【一、概述】
主要内容 JavaSpring[一.概述] JavaSpring[二.IOC] JavaSpring[三.Bean] JavaSpring[四.Bean管理注解实现] JavaSpring[五.AOP ...
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Unity3d学习 制作地形
这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...
随机推荐
- ES6 学习 -- 解构赋值
一.数组解构 **数组解构,解构出来的值跟数组下标是一一对应的,如果左边变量多于右边数组,则左边后面部分变量值为undefined,如果右边数组元素个数多于左边解构变量个数,则左边变量全都有值,且一一 ...
- css 内容溢出显示垂直滚动条,内容不超出就不显示滚动条
搬运自:https://www.cnblogs.com/wangyuanyuanlovexuanxuan/p/7767767.html html: <style> .div1{ width ...
- redis config
网络上抄袭过来的 然后顺序自己做点笔记 http://chembo.iteye.com/blog/2054021 这里有各个key 详细的描述 # redis 配置文件示例 # 当你需要为某个配置项指 ...
- [转]spring入门(六)【springMVC中各数据源配置】
在使用spring进行javaWeb开发的过程中,需要和数据库进行数据交换,为此要经常获取数据库连接,使用JDBC的方式获取数据库连接,使用完毕之后再释放连接,这种过程对系统资源的消耗无疑是很大的,这 ...
- 【JZOJ6370】基础 fake 练习题
description 装饰者坐在树荫下听着长者讲述以前的故事: 大神 yk 非常喜欢树,便钦点班里的 n 个小蒟蒻站在一棵 n 个点以 1 为根的树上,并且每个点上恰好有 1 个小蒟蒻. 大神 yk ...
- SpringMVC的孪生兄弟WebFlux
一.入门文字介绍 官方口水话简短翻译: Spring WebFlux是一个非阻塞的Web框架,用于利用多核,短时间可一处理大量并发连接. 非阻塞式 在servlet3.1提供了非阻塞的API,WebF ...
- OSS支持IPV6/IPV4双栈访问域名
摘要: OSS开放IPv6/IPv4双栈域名,可同时支持IPv6/IPv4客户端的访问,支持下一代互联网技术IPv6,可服务海量物理网设备连接等应用场景. 下一代IP协议 IPv4地址已接近枯竭,被誉 ...
- kubernetes忘记token或者token过期怎么加入k8s集群
1.先查看token是否还可用 [root@hadoop01 ~]# kubeadm token list 1.1) 还在则获取ca证书sha256编码hash值,不在则进行2操作 openssl x ...
- 02-Nov-2017 07:11:56.475 信息 [http-nio-8080-exec-10] com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource. Initializing c3p0 pool...
报错: 02-Nov-2017 07:11:56.475 信息 [http-nio-8080-exec-10] com.mchange.v2.c3p0.impl.AbstractPoolBackedD ...
- WinDBG常用断点命令
WinDBG提供了多种设断点的命令: bp 命令是在某个地址 下断点, 可以 bp 0x7783FEB 也可以 bp MyApp!SomeFunction . 对于后者,WinDBG 会自动找到MyA ...