文章目录
一、什么是Spring
spring
(春天),生于在2002年,由Rod Johnson
创作。Spring框架是一个集众多设计模式于一身的开源的
、轻量级
的项目管理
框架。致力于JAVAEE轻量级解决方案。
轻量级解决方案
:提供一个以简单的、统一的、高效的方式构造整个应用,并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。
二、Spring的核心作用是什么
Spring 框架用来管理
[创建|使用|销毁]项目中的组件,由于spring 框架可以帮我们生产项目中组件对象,因此也习惯称spring是一个工厂|容器。
组件
: 项目中的service,dao,action,都是项目中的组件
三、 如何搭建一个Spring项目
1. 导入spring依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
2. 引入spring配置文件
spring配置文件可以放在项目中的任何目录下面,并且名称随意。(就是那么随意的配置文件
<?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-3.2.xsd ">
</beans>
3.创建组件
package init;
public interface UserDAO {
void Save(String name);
}
package init;
public class UserDAOImpl implements UserDAO{
@Override
public void Save(String name) {
System.out.println("姓名:"+name);
}
}
4. 工厂管理
通过bean标签对组件进行管理
class:要进行注册的类
id: 别名,用于getBean(“id”)
<?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">
<bean id="userDAO" class="init.UserDAOImpl"></bean>
</beans>
5.通过测试类进行测试
package init;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringTest {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("init/spring.xml");
UserDAO userDAO=(UserDAO) context.getBean("userDAO");
userDAO.Save("小黑");
}
}
四、spring中的核心思想
IOC(inversion of controll)控制反转
:将对象的创建由原来(new)的方式转移到配置文件中,交给spring工厂来创建对象。为了体现Spring自身优势,又有了DI(dependcy Injection)依赖注入
:Spring不仅要创建对象,还要建立类与类之间的关系,因此在控制反转的基础上又提出了依赖注入的概念。
AOP( Aspect Oriental Programing ) 面向切面的编程
五、三种数据注入方式
1.set注入(配置文件property标签+成员变量set函数)
八种基本类型+String类型 +日期类型的注入<value>
<property name="name" value="zhagnsan"/>
<property name="age" value="21"/>
<property name="id" value="100063"/>
<property name="bir" value="2012/12/12"/>
<property name="price" value="23.23"/>
数组注入<array>
<property name="qqs">
<array>
<value>xxx</value>
<value>qqq</value>
<value>vvvv</value>
</array>
</property>
引用类型注入<ref>
<property name="userDAO" ref="userDAO"/>
集合类型注入<list> <map> <set> <props>
<property name="lists">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
<property name="maps">
<map>
<entry key="aa" value="xiaohei"/>
<entry key="bb" value="xiaoming"/>
<entry key="cc" value="xiaosan"/>
</map>
</property>
<property name="props">
<props>
<prop key="url">jdbc:mysql://localhost:3306/test</prop>
<prop key="driver">com.mysql.jdbc.Driver</prop>
<prop key="username">hr</prop>
<prop key="password">hr</prop>
</props>
</property>
2.构造注入(很少用了解即可,构造函数+ constructor-arg标签)
<constructor-arg index="0" name="id" value="1"/>
<constructor-arg index="1" name="name" value="xiaohei"/>
<constructor-arg index="2" name="age" value="12"/>
<constructor-arg index="3" name="qqs">
<array>
<value>xxx</value>
<value>222</value>
<value>333</value>
</array>
</constructor-arg>
3.自动注入
- autowire=”byName”
根据注入的属性名与配置文件中bean的id匹配,一致则注入,不一致报错
- autowire=”byType”
根据注入的属性类型,与配置文件中的类型匹配,类型一致注入(在多个实现类时,会产生歧义)
注意: 无论使用以上那种方式注入都需要为属性提供set方法
六、bean的创建模式
singleton:单例 默认
在工厂中全局唯一,只创建一次
prototype: 多例
全局不唯一,每次使用都会创建一个新的对象
如何控制单例还是多例
<bean id="" class="xxxx.userAction" scope="prototype|singleton">
七、bean的生产原理
原理: 反射+构造方法
//通过类名加载类+实例化类
UserDAOImpl userDAO = (UserDAOImpl) Class.forName("com.init.UserDAOImpl").newInstance();
System.out.println(userDAO);
八、bean的生命周期
(感觉和unity声明周期很像)
何时创建
随着工厂启动,
所有单例bean随之创建 非单例的bean,每次使用时创建
何时销毁
工厂
关闭,所有bean随之销毁
( 注意:spring对多例bean管理松散,不会负责多例bean的销毁
)
九、bean工厂创建对象的好处
使用配置文件管理java类,再生产环境中更换类的实现时不需要重新部署,修改文件即可
spring默认使用单例的模式创建bean,减少内存的占用
通过依赖注入建立了类与类之间的关系(使java之间关系更为清晰,方便了维护与管理)
学习视频:编程不良人