Spring----简介、IOC、DI与MyBatis和WEB项目的整合

一、Spring简介

Rod Johnson发明,此人是一个轮子理论(不重复造轮子)推崇者,所以设计了Spring框架提高开发效率,直接使用框架的方法。

1)Spring核心功能

1.IOC / DI :控制反转/依赖注入

2.AOP : 面向切面编程

3.声明式事务

2)Spring框架runtime(运行时环境)

首先Spring其实就是一个大容器,但Spring框架的基本容器是 Core Container,也就是想要跑起来Spring框架的最低标准。

1.Test:Spring提供的测试功能

2.Core Container:Spring框架的核心容器。Spring启动的最基本的条件

   Beans:负责创建类对象并管理对象

   Core:核心类

   Context:上下文参数,获取外部资源或者管理注解等

   SpEL:expression.jar,Spring的一种表达式语言(类似于JSTL)

3.AOP:实现aop功能需要依赖

4.Aspects:切面AOP依赖的包

5.DataAccess/Integration:Spring封装数据访问层(DAO)相关内容

   JDBC:Spring对JDBC封装后的代码

   ORM:封装了持久层(DAO)框架的代码。例如Hibernate

   transactions:对应 spring-tx.jar 声明式事务使用

6.WEB:需要Spring完成web相关功能的时候使用

   例如:由tomcat加载Spring配置文件时需要由Spring-web包

3)Spring框架种重要概念

1.容器(container):Spring当作一个大的容器

2.BeanFactory接口:为Spring的老版本接口 新版本中ApplicationContext 接口是BeanFactory的子接口。

3.再Spring3 开始吧Spring框架的功能拆分成多个jar(Spring2之前就一个jar包)

二、IOC简介

IOC(inversion of Control):控制反转,IOC的主要功能就是之前程序员需要通过new进行实例化对象的事情,转交给Spring负责完成。

控制:控制类的对象    反转:交给Spring负责

最大的作用就是:解耦,开发人员不需要管理对象,解除了对象管理和开发人员之间的耦合

三、Spring环境搭建

1)导入jar包

    Spring的基本运行环境是Core Container下的四个包以及一个日志包(commons-logging)

2)在src下新建 applicationContext.xml

1.文件名称和路径自定义

2.applicationContext.xml配置的信息最终存储到了ApplicationContext容器种

3.Spring的配置文件applicationContext.xml是基于schema

schema的文件扩展名是.xsd,可以理解为DTD的升级版(DTD:可实现xml文件的自动补全功能)

每次引入一个xsd文件就是一个namespace(xmlns)命名空间

4.配置文件中只需要引入基本schema,以后需要什么引入什么,可以在官方文档中查找。

   <通过bean/>创建对象,且默认在配置文件被加载时就将对象创建

<?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="peo" class="com.bjsxt.pojo.People"/>
</beans>

在java中添加测试方法

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
People people = ac.getBean("peo",People.class);
System.out.println(people);

getBean(“<bean>标签 id 值”,返回值类型);如果没有第二个参数, 默认是 Object

getBeanDefinitionNames(),Spring 容器中目前所有管理的所有对象

四、Spring创建对象的三种方式

1)通过构造方法创建

1.无参构造方法:默认

2.有参构造方法:需要明确在xml文件中配置,并且在类中提供有参构造方法。

在applicationContext.xml中设置调用哪个构造方法创建对象,如果设定的条件匹配多个构造方法的时候,则执行最后的那个构造方法。

<bean id="peo" class="com.bjsxt.pojo.People">
<!-- ref 引用另一个 bean value 基本数据类型或String 等 -->
<constructor-arg index="0" name="id" type="int" value="123">
</constructor-arg>
<constructor-arg index="1" name="name" type="java.lang.String" value="张三"></constructor-arg>
</bean>

2)通过实例工场创建

工厂设计模式:帮助创建类对象,一个工厂可以生产多个对象,且可以根据用户需求创建不同的对象。

实例工场:必须先创建工厂,然后才能生产对象

public class PeopleFactory {
    public People newInstance(){
        return new People(1,"测试");
    }
}

在applicationContext.xml中配置工厂对象和需要创建的对象

<bean id="factory" class="com.bjsxt.pojo.PeopleFactory"></bean>
<bean id="peo1" factory-bean="factory" factory-method="newInstance"></bean>

factory-bean:工厂的id   factory-method:工厂创建对象的方法名

3)通过静态工厂创建

所谓静态工厂,即不需要创建工厂,可以直接生产对象。

public class PeopleFactory {
    public static People newInstance(){
        return new People(1,"测试");
    }
}
<bean id="peo2" class="com.bjsxt.pojo.PeopleFactory" factory-method="newInstance"></bean>

五、Spring简化MyBatis

1. 导 入 mybatis 所 有 jar 和 spring 基 本包,spring-jdbc,spring-tx,spring-aop,spring-web,spring 整合 mybatis 的包等。

2.先配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!-- 上下文参数 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- spring 配置文件 -->
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 封装了一个监听器,帮助加载 Spring 的配置文件爱 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>

3.编写 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">
<!-- 数据源封装类 .数据源:获取数据库连接,spring-jdbc.jar 中-->
<bean id="dataSouce" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/ssm"></property>
<property name="username" value="root"></property>
<property name="password" value="smallming"></property>
</bean>
<!-- 创建 SqlSessionFactory 对象 -->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据库连接信息来源于 dataSource -->
<property name="dataSource" ref="dataSouce"></property>
</bean>
<!-- 扫描器相当于 mybatis.xml 中 mappers 下 package 标签,扫描 com.bjsxt.mapper 包后会给对应接口创建对象-->
<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 要扫描哪个包 -->
<property name="basePackage" value="com.bjsxt.mapper"></property>
<!-- 和 factory 产生关系 -->
<property name="sqlSessionFactory" ref="factory"></property>
</bean>
<!-- 由 spring 管理 service 实现类 -->
<bean id="airportService" class="com.bjsxt.service.impl.AirportServiceImpl">
<property name="airportMapper" ref="airportMapper"></property>
</bean>
</beans>

4. 编写代码
4.1 正常编写 pojo
4.2 编写 mapper 包下时必须使用接口绑定方案或注解方案(必须有接口)
4.3 正常编写 Service 接口和 Service 实现类
3.3.1 需要在 Service 实现类中声明 Mapper 接口对象,并生成
get/set 方法
4.4 spring 无法管理 Servlet,在 service 中取出 Servie 对象

@WebServlet("/airport")
public class AirportServlet extends HttpServlet {
	private AirportService airportService;

	@Override
	public void init() throws ServletException
	{
/*
 * 对 service 实例化
 * ApplicationContext ac = new
 */
		ClassPathXmlApplicationContext( "applicationContext.xml" );
/* spring 和 web 整合后所有信息都存放在 */
		webApplicationContextApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext( getServletContext() );


		airportService = ac.getBean( "airportService", AirportServiceImpl.class );
	}

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setAttribute("list", airportService.show());
		req.getRequestDispatcher("index.jsp").forward(req, resp);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值