1. spring概念
spring是一个轻量级、全栈的开源框架,它的问世解决了Java的各个分层的代码量,它还能方便的和其他的框架一起整合使用。总而言之,这是一款优秀的框架,几乎所有的Java项目都用到spring框架。
2. spring的发展历史
spring的前身是EJB,它和spring不同,EJB是一款重量级的框架,而且侵入性极强。而spring就是为了解决EJB的这些缺点才出现在世人眼中的。
spring之父是Rod Johnson,spring并不是他研发出来的,但spring的许多思想是Rod Johnson这个人最先提出来的。
3. spring的优势
方便解耦,简化开发
AOP编程的支持
声明式事务的支持
方便程序的测试
4. spring快速入门
4.1 spring入门程序开发步骤
(1). 导入spring开发的基本包坐标
(2). 编写后面需要new的接口和实现类
(3). 创建spring的核心配置文件
(4). 在spring的核心配置文件中配置实例
(5). 使用spring的API获取实例
4.2 spring开发的基本包坐标
<-- 这个是spring的context坐标 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<-- 这个是junit的包坐标 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
4.3 编写Dao接口和实现类
public interface UserDao {
public void save();
}
public class UserDaoImpl implements UserDao {
private List<User> list;
private Map<Integer,User> map;
private Properties props;
public void setList(List<User> list) {
this.list = list;
}
public void setMap(Map<Integer, User> map) {
this.map = map;
}
public void setProps(Properties props) {
this.props = props;
}
public void save() {
System.out.println(list);
System.out.println(map);
System.out.println(props);
}
}
//User实体类
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public User() {
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
4.4 创建spring的核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
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">
</beans>
4.5 在spring的核心配置文件中配置<bean>实例
<bean id="userDao" class="cn.liu.dao.impl.UserDaoImpl">
<property name="list">
<list>
<ref bean="user1"></ref>
<ref bean="user2"></ref>
</list>
</property>
<property name="map">
<map>
<entry key="1" value-ref="user1"></entry>
<entry key="2" value-ref="user2"></entry>
</map>
</property>
<property name="props">
<props>
<prop key="China">Jielun Zhou</prop>
<prop key="USA">Camila</prop>
<prop key="Korea">J.Fla</prop>
</props>
</property>
</bean>
<!--set方法注入-->
<bean id="userService" class="cn.liu.service.impl.UserServiceImpl" p:user-ref="userDao">
<!--ref里是引用bean的id-->
<!--name里面是该bean类里面的成员变量的属性名-->
<!--<property name="user" ref="userDao"></property>-->
</bean>
<bean id="user1" class="cn.liu.bean.User">
<!--<property name="" ref=""></property>-->
<constructor-arg name="name" value="Camila"></constructor-arg>
<constructor-arg name="age" value="19"></constructor-arg>
</bean>
<bean id="user2" class="cn.liu.bean.User">
<constructor-arg name="name" value="J.Fla"></constructor-arg>
<constructor-arg name="age" value="25"></constructor-arg>
</bean>
4.6 使用spring的API获取<bean>实例
@Test
public void test1() {
ApplicationContext app = new ClassPathXmlApplicationContext("application-context.xml");
UserService userService = (UserService) app.getBean("userService");
userService.save();
}
5. spring配置文件
5.1 Bean标签基本配置
bean标签的作用是通过包名+类名全路径来加载类进内存,默认情况下它调用的是类的无参构造函数,如果该类没有无参构造方法,会报错。
id:bean标签的id是spring容器的唯一标识(唯一,不可重复)
class:bean的权限定名称,需要写类的包名+类名
5.2 Bean标签范围配置
取值范围 | 说明 |
---|---|
singleton | 默认值,单例的 |
prototype | 多例的 |
request | WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中 |
session | WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中 |
global session | WEB 项目中,应用在 Portlet 环境,如果没有 Portlet 环境那么globalSession 相当于session |
5.3 Bean实例化三种方式
(1). 使用无参构造方法返回Bean实例(默认情况是这种)
<bean id="userDao" class="cn.liu.dao.impl.UserDaoImpl">
(2). 工厂的静态方法返回bean实例
public class StaticFactory {
public static UserDao createUserDao(){
return new UserDaoImpl();
}
}
<bean id="userDao" class="com.liu.factory.StaticFactory"
factory-method="createUserDao" />
(3). 工厂的实例方法实例化
public class DynamicFactory {
public UserDao getUserDao(){
return new UserDaoImpl();
}
}
<bean id="factory" class="com.liu.factory.DynamicFactory"/>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao"/>
1. spring概念
spring是一个轻量级、全栈的开源框架,它的问世解决了Java的各个分层的代码量,它还能方便的和其他的框架一起整合使用。总而言之,这是一款优秀的框架,几乎所有的Java项目都用到spring框架。
2. spring的发展历史
spring的前身是EJB,它和spring不同,EJB是一款重量级的框架,而且侵入性极强。而spring就是为了解决EJB的这些缺点才出现在世人眼中的。
spring之父是Rod Johnson,spring并不是他研发出来的,但spring的许多思想是Rod Johnson这个人最先提出来的。
3. spring的优势
方便解耦,简化开发
AOP编程的支持
声明式事务的支持
方便程序的测试
4. spring快速入门
4.1 spring入门程序开发步骤
(1). 导入spring开发的基本包坐标
(2). 编写后面需要new的接口和实现类
(3). 创建spring的核心配置文件
(4). 在spring的核心配置文件中配置实例
(5). 使用spring的API获取实例
4.2 spring开发的基本包坐标
<-- 这个是spring的context坐标 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<-- 这个是junit的包坐标 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
4.3 编写Dao接口和实现类
public interface UserDao {
public void save();
}
public class UserDaoImpl implements UserDao {
private List<User> list;
private Map<Integer,User> map;
private Properties props;
public void setList(List<User> list) {
this.list = list;
}
public void setMap(Map<Integer, User> map) {
this.map = map;
}
public void setProps(Properties props) {
this.props = props;
}
public void save() {
System.out.println(list);
System.out.println(map);
System.out.println(props);
}
}
//User实体类
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public User() {
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
4.4 创建spring的核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
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">
</beans>
4.5 在spring的核心配置文件中配置<bean>实例
<bean id="userDao" class="cn.liu.dao.impl.UserDaoImpl">
<property name="list">
<list>
<ref bean="user1"></ref>
<ref bean="user2"></ref>
</list>
</property>
<property name="map">
<map>
<entry key="1" value-ref="user1"></entry>
<entry key="2" value-ref="user2"></entry>
</map>
</property>
<property name="props">
<props>
<prop key="China">Jielun Zhou</prop>
<prop key="USA">Camila</prop>
<prop key="Korea">J.Fla</prop>
</props>
</property>
</bean>
<!--set方法注入-->
<bean id="userService" class="cn.liu.service.impl.UserServiceImpl" p:user-ref="userDao">
<!--ref里是引用bean的id-->
<!--name里面是该bean类里面的成员变量的属性名-->
<!--<property name="user" ref="userDao"></property>-->
</bean>
<bean id="user1" class="cn.liu.bean.User">
<!--<property name="" ref=""></property>-->
<constructor-arg name="name" value="Camila"></constructor-arg>
<constructor-arg name="age" value="19"></constructor-arg>
</bean>
<bean id="user2" class="cn.liu.bean.User">
<constructor-arg name="name" value="J.Fla"></constructor-arg>
<constructor-arg name="age" value="25"></constructor-arg>
</bean>
4.6 使用spring的API获取<bean>实例
@Test
public void test1() {
ApplicationContext app = new ClassPathXmlApplicationContext("application-context.xml");
UserService userService = (UserService) app.getBean("userService");
userService.save();
}
5. spring配置文件
5.1 Bean标签基本配置
bean标签的作用是通过包名+类名全路径来加载类进内存,默认情况下它调用的是类的无参构造函数,如果该类没有无参构造方法,会报错。
id:bean标签的id是spring容器的唯一标识(唯一,不可重复)
class:bean的权限定名称,需要写类的包名+类名
5.2 Bean标签范围配置
取值范围 | 说明 |
---|---|
singleton | 默认值,单例的 |
prototype | 多例的 |
request | WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中 |
session | WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中 |
global session | WEB 项目中,应用在 Portlet 环境,如果没有 Portlet 环境那么globalSession 相当于session |
5.3 Bean实例化三种方式
(1). 使用无参构造方法返回Bean实例(默认情况是这种)
<bean id="userDao" class="cn.liu.dao.impl.UserDaoImpl">
(2). 工厂的静态方法返回bean实例
public class StaticFactory {
public static UserDao createUserDao(){
return new UserDaoImpl();
}
}
<bean id="userDao" class="com.liu.factory.StaticFactory"
factory-method="createUserDao" />
(3). 工厂的实例方法实例化
public class DynamicFactory {
public UserDao getUserDao(){
return new UserDaoImpl();
}
}
<bean id="factory" class="com.liu.factory.DynamicFactory"/>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao"/>