Spring介绍
1.1 Spring概述
Spring框架是目前市面上最常用的框架之一,大多数的项目中使用的都是Spring全家桶相关的框架,Spring可以支持绝大多数市面上常用的第三方框架。Spring框架中的核心点在其中的IOC及AOP两个模块。
原生的开发过程中,程序员做的最多的事情是在创建对象,过程中一是需要创建很多的对象,二是对象过多的时候不好管理,对内存的影响也比较大,因此可以通过Spring提供的IOC及AOP将对象的创建及管理交给框架处理,程序员只需要关注业务操作。
2. Spring原理
2.1 原生的功能实现
需求:实现对用户的添加及删除操作
serDaoImpl userDao = new UserDaoImpl();
userDao.insertUser(new User());
userDao.deleteUser(1);
开发过程中需要频繁的创建对象,且需要考虑其生命周期的问题,维护比较麻烦
2.2 SpringIOC(控制反转)
2.2.1 Spring实现功能
需求:Spring实现用户的添加及删除操作
添加配置文件(applicationContext.xml 名字是任意的)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
配置实例对象
id:唯一标识
class:指定实体类所在的路径地址
-->
<bean id="userDao" class="dao.impl.UserDaoImpl"></bean>
</beans>
测试代码
//读取配置文件
ApplicationContext ac =
new ClassPathXmlApplicationContext("applicationContext.xml");
//参数一:配置文件中的唯一标识 参数二:要接收的数据类型
IUserDao userDao = ac.getBean("userDao", UserDaoImpl.class);
userDao.insertUser(new User());
userDao.deleteUser(1);
2.2.2 SpringIOC概念
IOC(控制反转):将对象的创建及管理交给SpringIOC处理
DI(依赖注入):在程序运行期间,动态的将值进行注入(其实将对象的创建由编译时期放到了运行时期)
Spring的注入方式
1.无参构造+setter方法构造
<!--1.通过无参构造及setter方法构造对象-->
<bean id="user2" class="beans.User">
<property name="age" value="12"/>
<property name="name" value="haha"/>
</bean>
若实体类中未提供setter方法
2.有参构造注入
<!--2.通过构造器进行构造对象-->
<bean id="user3" class="beans.User">
<constructor-arg name="age" value="13"/>
<constructor-arg name="name" value="hehe"/>
</bean>
<!--指定参数下标-->
<bean id="user4" class="beans.User">
<constructor-arg index="0" value="14" type="int"/>
<constructor-arg index="1" value="hehe"/>
</bean>
3.静态工厂注入
<!--3.通过静态工厂注入对象-->
<bean id="user5" class="factory.UserFactory" factory-method="newInstance"></bean>
/**
* 返回user对象
* @return
*/
public static User newInstance(){
return new User(15,"小溪");
}
4.动态工厂注入
<!--4.动态工厂注入对象-->
<bean id="dynamicFacoty" class="factory.DynamicUserFactory"></bean>
<!--
factory-bean:指定要通过哪个工厂对象构造实例
factory-method:指定要通过工厂中的哪个方法来构造实例
-->
<bean id="user6" factory-bean="dynamicFacoty" factory-method="newInstance"></bean>
public User newInstance(){
return new User(16,"小黑");
}