一、Spring简介
- Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和
AOP(Aspect Oriented Programming:面向切面编程)为内核 - 包括展现层 SpringMVC ,持久层 Spring JDBCTemplate ,业务层事务管理
- 优点
二、Spring入门实例(开发工具IDEA)
(1)Spring开发基本步骤:(先创建一个Maven)
- ① 导入 Spring 开发的基本包坐标
- ② 编写 Dao 接口和实现类
- ③ 创建 Spring 核心配置文件
- ④ 在 Spring 配置文件中配置 UserDaoImpl
- ⑤ 使用 Spring 的 API 获得 Bean 实例
1.导入 Spring 开发的基本包坐标,需要在pom.xml配置
2.编写 Dao 接口和实现类
package com.dao;
public interface UserDao {
public void save();
}
package com.daoimpl;
import com.dao.UserDao;
public class UserDaoImpl implements UserDao{
public void save() {
System.out.println("save running -------");
}
}
3.创建 Spring 核心配置文件,在resource文件下创建并命名为ApplicationContext.xml
4.在 Spring 配置文件中配置 UserDaoImpl
- id:唯一性标识,不可重复,习惯命名为接口名
- class:实现类的全限定类名
<?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="com.daoimpl.UserDaoImpl"></bean>
</beans>
5.使用 Spring 的 API 获得 Bean 实例(使用ApplicationContext接口 获得 Bean 实例)
- app.getBean(“userDao”),userDao就是ApplicationContext.xml文件中定义的id
- ClassPathXmlApplicationContext(“ApplicationContext.xml”);ApplicationContext.xml就是Spring核心配置名
package com.daoimpltest;
import com.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class userDaoImplTest {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserDao userDao = (UserDao) app.getBean("userDao");
userDao.save();
}
}
6.运行结果
(2)总结:运用Spring不需要手动创建userDao对象,只需要通过接口加载配置文件ApplicationContext.xml,再获取对象即可,做到了解耦合!
(3)Bean标签范围配置——scope:指对象的作用范围,取值如下
- singleton:默认的,单例的,多个对象只对应一个地址空间
- prototype:多例的,多个对象对应不同的地址空间
测试如下
- scope=“singleton”
<?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="com.daoimpl.UserDaoImpl" scope="singleton"></bean>
</beans>
package com.springtest;
import com.dao.UserDao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringTest {
@Test
public void testScope(){
ApplicationContext app = new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserDao userDao = (UserDao) app.getBean("userDao");
UserDao userDao2 = (UserDao) app.getBean("userDao");
System.out.println(userDao);
System.out.println(userDao2);
}
}
- scope=“prototype”
经过测试发现:
- scope为singleton时不同对象对应同一个地址
- scope为prototype时不同对象对应不同地址
- 补充:scope为singleton时 bean对象创建是在加载ApplicationContext.xml时,
- 补充:scope为prototype时 bean对象创建是在加载执行getBean()方法时,