一.spring简述
spring是什么?
spring是分层的java SE/EE应用full-stack轻量级开源框架,以IoC(Inverse Of Control:控制反转)和AOP(Aspect OrientedProgramming:面向切面编程)为内核
二.IOC
什么是IOC?
spring容器在初始化时先读取配置文件,根据配置文件或元数据与组织对象存入容器中,程序使用时再从Ioc容器中取出需要的对象
2.1 IOC创建对象的方式
已知: user.java
class user(){
private String username;
private Int password;
}
演示创建user对象的几种方式:
1.下标赋值
<!--创建对象-->
<bean id="user" class="com.kaikai.pojo.user">
<!--给对象参数赋值-->
<constructor-arg index="0" value="第一个参数username的值"/>
</bean>
2.类型赋值
<!--通过类型创建,不建议使用-->
<bean id="user" class="com.kaikai.pojo.user">
<constructor-arg type="java.lang.String" value="username的值"/>
</bean>
3.参数名
<bean id="user" class="com.kaikai.pojo.user">
<constructor-arg name="password" value="password的值"/>
</bean>
三.Spring基本配置
1.基本配置<bean>
别名
<alias name="user" alias="userNew"/>
bean的配置
<bean id="自定义" class="类的全路径">
<property name="str" value="我是Spring容器赋给该类属性为str的值"></property>
</bean>
<!-- ***bean的配置
id:bean的唯一标识,也就是相当于我们学的对象名
class:bean对象所对应的全限定名:包含+类型
name:也是别名 可以取多个别名 -->
<bean id="user" class="com.kaikai.pojo.User" name="user2,u1">
****设置属性值***
<property name="str" value="name的值"/>-->
</bean>
<!--
ref:引用Spring容器中创建好的对象
value:设置具体的值,基本数据类型
-->
<!--因为UserServletImpl中有userDao这个属性 我们给他注入一个userDao的实现类对象-->
<bean id="UserServiceImpl" class="com.kaikai.service.UserServiceImpl">
<property name="userDao" ref="OracleImpl"></property>
</bean>
(1).Bean标签范围配置
scope:指对象的作用范围,如下
注:在配置文件加载的时候,容器中管理的对象就已经初始化了
当scope属性值为singeton,每次得到的是同一个对象,
当配置文件被加载时创建,直到应用卸载时容器销毁
当scope属性值为phototype时,每次getBean()创建一个不同对象
当对象在使用中,就一直存在,当长时间不用时,被java的垃圾回收器回收.
(2).Bean生命周期配置
init-method:指定类中初始化方法的名称
destory-method:指定类中销毁方法的名称
2.Bean实例化的三种方式
(1).无参构造方法
前面介绍的都是无参构造方法
(2).工厂静态方法实例化
1.创建工厂类,定义静态方法
public class UserDaoFactory(){
public static User getUserDao(){
return new UserDaoImpl();
}
}
2.配置bean class为
<bean id="userImpl" class="com.kaikai.factory.UserDaoFactory"
destroy-method="getUserDao"/>
(3).工厂实例方法实例化
1.创建工厂类
//定义
public class UserFactory(){
public UserDao getUserDao(){
return new UseeDaoImpl();
}
}
2.配置工厂 bean
<!--配置工厂-->
<bean id="factory" class="com.kaikai.UserFactory"></bean>
<!--配置bean-->
<bean id="userDao" factory-bean="factory" factory-method="getUserDao">
3.Bean的依赖注入概念(set方法注入+constructor构造器注入)
依赖注入:它是spring框架核心IOC的具体体现 。
在编写程序时,通过控制反转,将对象的创建交给Spring,但是代码中不可能出现没有依赖的情况,Ioc解耦只是降低他们的关系,并不会消除依赖、例如业务层调用持久层的方法
那这种业务层和持久层的关系,再使用Spring后,就让Spring来维护了。简单的来说,就是让框架把持久层传入业务层,不需要我们自己去获取。
(1)注入引用的Bean
1.set注入
已知:UserServiceImpl对象中包含属性User user;
<!--
ref:引用Spring容器中创建好的对象
value:设置具体的值,基本数据类型
-->
<!--因为UserServletImpl中有userDao这个属性 我们给他注入一个userDao的实现类对象-->
<bean id="UserServiceImpl" class="com.kaikai.service.UserServiceImpl">
<property name="userDao" ref="OracleImpl"></property>
</bean>
Set注入(P命名空间注入)
2.构造方法注入
(2)注入普通数据类型
上面的操作都是注入的引用bean,除了对象的引用可以注入,普通数据类型,集合也可以注入
注入数据的三种类型:
***普通数据类型
***引用数据类型
***集合数据类型
普通类型注入:
<bean id="UserServiceImpl" class="com.kaikai.service.UserServiceImpl">
<property name="username" value="张三"></property>
</bean>
注入其他类型(集合,Map,properties)
4.Import引入其他配置文件
四、Spring相关API
ApplicationContext的实现类
1)ClassPathXmlApplicationContext
它是从类的根路径下加载配置文件 推荐使用这种
2)fileSystemXmlApplicationContext
它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置
3)AnnotationConfigApplicationContext
当时用注解配置容器对象时,需要使用此类来创建spring容器。用它来读取注解
getBean方法使用
五、Spring配置数据源
数据源(连接池)的作用
数据源(连接池)是提高程序性能出现的
事先实例化数据源,初始化部分连接资源
使用链接资源时从数据源中获取
使用完毕后将连接资源归还给数据源
常见的数据源(连接池):DBCP、C3P0、BoneCP、Druid等
开发步骤:
①导入数据源的坐标和数据库坐标
②创建数据源对象
③设置数据源的基本连接数据
④使用数据获取连接资源和归还连接数
连接方式如下: 逐层解耦合
1.手动配置连接池
@Test
public void fun() throws PropertyVetoException, SQLException {
//得到ComboPooledDataSource
ComboPooledDataSource dataSource= new ComboPooledDataSource();
dataSource.setUser("root");
dataSource.setPassword("123");
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb1?serverTimezone=UTC");
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
2.properties创建连接池参数
jdbc.username=root
jdbc.password=123
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb1?serverTimezone=UTC
3.Spring配置
1.配置applicationContext.xml
2.Test
4.通过抽取jdbc配置文件
利于不同数据库账户不一样,方便在properties里面修改
1.配置jdbc.properties
jdbc.username=root
jdbc.password=123
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb1?serverTimezone=UTC
2.配置applicationContext.xml