Spring4快速入门第三章配置bean(下)
来源:互联网 发布:免费聊天相亲软件 编辑:程序博客网 时间:2024/04/29 14:35
上一章讲解了Spring bean配置中的依赖注入,处理特殊符号,引入其他bean,集合属性,p命名空间使用。接下来我们谈谈bean的自动装备,bean之间的依赖关系,bean的作用域,如何读取properties配置文件,bean的生命周期。
注*:需要的jar包在spring4快速入门第一章HelloWorld中有
趁大家有精力,想讲讲重点,如何读取properties配置文件,一般在配置连接池时用的比较多
在src下创建一个db.properties
jdbc.user=rootjdbc.password=rootjdbc.driverClass=com.mysql.jdbc.Driver#jdbc.jdbcUrl=jdbc:mysql://localhost:3306/test,如果是localhost:3306是可以省略不写的,初学者建议不要偷懒jdbc.jdbcUrl=jdbc:mysql:///testjdbc.initPoolSize=5jdbc.maxPoolSize=10在bean.xml配置连接池
<!-- 导入外部的资源文件 --><context:property-placeholder location="classpath:db.properties"/><!-- 配置c3p0数据源 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="user" value="${jdbc.user}"></property><property name="password" value="${jdbc.password}"></property><property name="driverClass" value="${jdbc.driverClass}"></property><property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property><property name="initialPoolSize" value="${jdbc.initPoolSize}"></property><property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property></bean>当然需要导入c3p0的jar包
<dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.1</version></dependency>测试类及结果
@Testpublic void C3p0Connection() throws SQLException{DataSource dataSource = (DataSource) ctx.getBean("dataSource");System.out.println(dataSource.getConnection());}
com.mchange.v2.c3p0.impl.NewProxyConnection@1bc4c37
现在遇到一个问题,在运行测试方法的时候出现以下错误:
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown character set: 'utf8mb4'at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:382)at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:456)at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:464)at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:472)at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:477)at org.springframework.jdbc.core.JdbcTemplate.queryForInt(JdbcTemplate.java:486)在网上找了很多,原来是数据库驱动的问题,把驱动缓存mysql-connector-java5.1.6就好了,具体为什么,我也不是很清楚。
bean的自动装备
主要有两种,但是两种都可以不用,有了注解@autowire就不需要在xml文件中配置
byType: 根据类型进行自动装配. 但要求 IOC 容器中有多个则无法完成自动装配.
byName: 若属性名和某一个 bean 的 id 名一致, 即可完成自动装配.
创建一个Position,Address和Person类,为了不占用太多的篇幅,我就不贴实体类的代码,Position 只需要salary属性,Address 需要city 和 street属性,而Person 需要Position和Address字段。
bean配置
<bean id="address" class="com.spring.entity.Address"><property name="city" value="HuBei"></property><property name="street" value="GuangShanStreet"></property></bean><bean id="position" class="com.spring.entity.Position"><property name="salary" value="$4000"></property></bean><bean id="person" class="com.spring.entity.Person" autowire="byName"></bean>
测试代码及结果
@Testpublic void Autowire(){Person person = ctx.getBean(Person.class);System.out.println(person.toString());}
Person [address=Address [city=HuBei, street=GuangShanStreet], position=Position [salary=$4000]]
如果把id="address"改为id="address1"
Person [address=null, position=Position [salary=$4000]]如果换成 byType 是没有问题的,但是如果有多个address 或者是多个 position就会有问题,因为这个不怎么重要,我就简单的谈谈,各位不要嫌弃我懒。
bean的作用域
prototype: 原型的. 每次调用 getBean 方法都会返回一个新的 bean. 且在第一次调用 getBean 方法时才创建实例
singleton: 单例的. 每次调用 getBean 方法都会返回同一个 bean. 且在 IOC 容器初始化时即创建 bean 的实例. 默认值
默认是单例的
@Testpublic void Scope(){Person person = ctx.getBean(Person.class);Person person1 = ctx.getBean(Person.class);System.out.println(person == person1);}结果是:true
原型的,添加scope="prototype"
<bean id="person" class="com.spring.entity.Person" autowire="byName" scope="prototype"></bean>相同的测试方法结果是:false
bean之间的关系
继承 parent=""
<bean id="address" class="com.spring.entity.Address"><property name="city" value="HuBei"></property><property name="street" value="GuangShanStreet"></property></bean><bean id="address1" parent="address"><property name="street" value="ITDragonStreet"></property></bean>测试方法及结果:
@Testpublic void Relation(){Address address = (Address) ctx.getBean("address1");System.out.println(address.toString());}
Address [city=HuBei, street=ITDragonStreet]其实和java里面的继承差不多,也可以覆盖父类,如果想要父类做模版,设置abstract="true"
依赖 depends-on=""
<bean id="position-depend" parent="position" depends-on="address"></bean>如果address不存在,在容器启动的时候就会报错。
网址链接:http://blog.csdn.net/qq_19558705/article/details/50018469
后续内容,会及时更新,2015年11月25日23点17分的武汉有点冷,我在用发抖的双手敲这键盘。对博客有什么意见和问题的可以留言,我会及时处理。
更多干货等你来拿 http://www.itit123.cn/
- Spring4快速入门第三章配置bean(下)
- Spring4快速入门第二章配置bean(上)
- Spring4.3入门 配置bean
- Spring4快速入门第四章注解装配bean属性
- Spring4-快速入门之在IOC容器中装配Bean
- Spring4-2 Bean配置
- 第三章 快速搭建Spring4.x项目
- Spring4.3入门 Ioc 容器中配置bean
- Spring4快速入门第五章操作数据库
- Spring4快速入门第六章AOP
- Spring4快速入门第七章事务管理
- Spring4-快速入门
- spring4用groovy配置bean
- 2.3 Spring4 快速入门-bean 的注入与初始化和销毁
- Spring4快速入门第一章HelloWorld
- Spring4入门一:bean的创建
- Spring4.3入门 Spring bean继承
- Spring4学习笔记-通过注解配置bean
- android选择相片和拍照保存
- 对一个二维数组进行冒排序
- iOS_NSURLSessionDownloadTask_显示加载进度_断点续传(网络中断情况).
- chrome插件编写之新版hello world
- ABAP变量的可见范围
- Spring4快速入门第三章配置bean(下)
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- 【NGUI】通过射线检测被遮挡的物体
- wamp 安装配置
- 《C++ primer》英文第五版阅读笔记(十九)——位运算符,sizeof运算符和逗号运算符
- 传智播客javase总结 7
- oracle 10g 创建数据库实例卡在3%不动
- Python篇----面向对象程序设计(一)(类和对象篇)
- NSNotificationCenter通知传参数