目录
一、springBean详解
(一)bean实例化
1.使用默认的无参构造方法(常用)
2.使用工厂实例化方式
创建一个工厂,用来生产user(好处是可以在创建方法中写逻辑)
配置:
3.使用静态工厂方式创建对象
创建静态工厂:
配置文件:
(二)bean的作用范围和生命周期
spring框架中bean的作用范围就是bean的存活范围
使用scope属性来配置
singleto 单例默认
prototype 多例
request 只要Spring中创建实例,就将实例绑定到request作用域中
session 只要在spring中创建实例,就将实例绑定到session作用域中
globalSession :在分布式环境中使用,用来绑定全局session
测试单例模式:
测试:
结果:
修改配置文件,设置多例模式:
测试结果:
(三) bean生命周期的两个特殊方法
所有在spring容器中管理的类,我们都可以为该类配置两个特殊的方法,初始化和销毁的方法。
如果配置的时候scope属性是prototype 销毁的方法不起作用。
在类中创建两个自定义的方法:
在spring核心配置文件中:
我们要调用销毁方法的时候,必须要在spring容器销毁后方法才调用
结果:
所有在spring容器中的对象生命周期都是跟随容器来运行的。当spring容器创建的时候,bean对象被创建、初始化、容器被销毁的时候,bean对象也被销毁。
二 、springDI(依赖注入)
(一)什么是依赖注入
我们用spring实例化对象后,用来解决对象之间的依赖问题
依赖注入:
在spring容器中,如果存在对象,我们可以通过spring来实现属性注入
依赖注入简单来说就是属性注入,所有注入和被注入的类都需要由spring容器去管理
(二)多种数据类型的注入方式
1.通过构造方法注入
前提是需要有有参的构造方法
在book类中添加两个参数的构造方法
在配置文件中:
测试:
结果:
创建一个三个三参数的构造方法:
其中data是引用数据类型,不能直接给值
测试:
2.通过set方法进行属性注入
前提是需要有空参构造,必须有对应属性的set方法
spring的核心配置文件:
测试:
(三)复杂属性的依赖注入
1.对象
结果:
如果容器中没有book对象,创建一个自己使用的对象:
结果;
2.数组
在user对象中添加数组属性:
配置文件修改:
测试:
结果:
3.list属性
修改实体类:
配置文件:可以引入容器中有的对象,也可以创建一个新的
测试:
结果:
4.Map属性
修改实体类:
配置文件:
测试:
5.set属性
略
(四)spring配置文件模块化
spring中在配置文件中要配置很多的bean,这些bean相互之间有的有关联,有的没有,如果我们配置的bean过多的时候,可以将配置文件拆分开,最后合在一起。
创建配置文件的时候可以使用标签<import>标签来引入其他的配置文件
三、 spring整合jdbc
spring框架是支持jdbc模板的,spring在jdbc基础上添加了很多支持的类
spring让jdbc的配置更简化,通过spring容器管理,将jdbc的操作对象交给spring去创建
1.导入依赖
<!--mysql连接包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--导入spring支持jdbc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<!--引入c3p0连接池依赖-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
2.创建实体类
3.创建dao层对象
public class PersonDao
{
//创建spring-jdbc提供的一个模板类
private JdbcTemplate jt;
//创建一个唯一的构造方法,创建对象的时候必须将JdbcTemplate类放入
public PersonDao(JdbcTemplate jt) {
this.jt = jt;
}
//添加的方法
public int addPerson(Person person){
return jt.update("insert into person (name,sex,hobby,birthday) values (?,?,?,?)",
person.getName(),person.getSex(),person.getHobby(),person.getBirthday());
}
//修改的方法
public int editPerson(Person person){
return jt.update("update person set name = ? , hobby = ? where id = ?",
person.getName(),person.getHobby(),person.getId());
}
//查询单个的方法
public Person getPersonById(int id){
//调用模板类中的方法
return jt.queryForObject("select * from person where id = ?",this,id);
}
//查询多个的方法
public List<Person> getPersonAll(){
return jt.query("select * from person",this);
}
@Override
public Person mapRow(ResultSet rs, int rowNum) throws SQLException {
Person p = new Person();
p.setId(rs.getInt("id"));
p.setName(rs.getString("name"));
p.setSex(rs.getString("sex"));
p.setHobby(rs.getString("hobby"));
p.setBirthday(rs.getDate("birthday"));
return p;
}
}
4.修改核心配置文件
<!--使用c3p0来配置数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!--配置驱动-->
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<!--配置url-->
<property name="jdbcUrl" value="jdbc:mysql:///mybatis"/>
<!--配置用户名-->
<property name="user" value="root"/>
<!--配置密码-->
<property name="password" value="root"/>
</bean>
<!--参加JDBCtemplate模板类-->
<bean id="jt" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 将数据源配置到模板类中-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 创建personDao对象-->
<bean id="personDao" class="cn.offcn.dao.PersonDao">
<constructor-arg name="jt" ref="jt"/>
</bean>
5.测试
导入junit
结果: