1.Spring简介:

a)Spring春天

b)官网:https://spring.io

c)设计理念:轮子理念,不要重复创造轮子;

d)Spring可以被理解为一个容器,用于管理其他的框架;

e)Spring个版本下载地址:https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-local/org/springframework/spring

2.Spring FrameworkRuntime

a) spring-aop-4.1.6.RELEASE.jar

面向切面编程, 必须导入的jar包

b) spring-aspects-4.1.6.RELEASE.jar

面向切面编程时依赖的jar包.

c) spring-beans-4.1.6.RELEASE.jar

是Spring的核心之一, 用于管理对象.

d) spring-context-4.1.6.RELEASE.jar

Spring的核心之一. 上下文, Spring上下文.

e) spring-context-support-4.1.6.RELEASE.jar

上下文依赖的jar包.

f) spring-core-4.1.6.RELEASE.jar

Spring的核心, 是Spring最基本的实现(支持)

g) spring-expression-4.1.6.RELEASE.jar

Spring的核心之一. 对el表达式的一个封装.

h) spring-jdbc-4.1.6.RELEASE.jar

Spring对jdbc封装的一个框架

i) spring-jms-4.1.6.RELEASE.jar

java message service. java消息服务, 消息队列.

j) spring-orm-4.1.6.RELEASE.jar

对orm框架的封装, 例如提供了对hibernate框架的支持.

k) spring-oxm-4.1.6.RELEASE.jar

object xml model. 小型的框架.

l) spring-test-4.1.6.RELEASE.jar

用于进行测试, 类似于JUnit的一个框架.

m) spring-tx-4.1.6.RELEASE.jar

用于使用配置文件实现对实务的管理(声明式事务)

n) spring-web-4.1.6.RELEASE.jar

Spring对javax.servlet包及子包中的接口或类的实现或子类.

  • o) spring-webmvc-4.1.6.RELEASE.jar

Spring提供的mvc控制器层框架. 必须依赖spring-web.jar.

支持注解开发, 使用非常简单.

p) spring-webmvc-portlet-4.1.6.RELEASE.jar

也是一个mvc框架, 使用global session取代了Application的概念.

q) spring-websocket-4.1.6.RELEASE.jar

可以支持通过socket技术实现web访问. 提供了一种可以自定义中间件的技术

3.Spring环境搭建

3.1导包

至少需要导入5个jar包

commons-logging-1.1.3.jar

spring-beans-4.1.6.RELEASE.jar

spring-context-4.1.6.RELEASE.jar

spring-core-4.1.6.RELEASE.jar

spring-expression-4.1.6.RELEASE.jar

3.2编写配置文件

a)Spring 可以看成一个容器,容器对象叫ApplicationContext,用于存放所有Spring管理的对象;

b)ApplicationContext是一个接口,通常我们使用的实现类叫ClassPathXmlApplicationContext,用于加载并解析配置文件。

c)xml配置文件命名其实是无所谓的,一般情况下,该配置文件的名为:applicationContext.xml,放在src目录下;

<?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: 唯一标识, 用于获取对象

class: 标识类的全限定路径

-->

<bean id="person" class="com.bjsxt.pojo.Person"></bean>

</ beans>

d)配置文件中通过schema约束xml的格式,根元素为<beans>,<bean>标签用于创建对象,一个<

bean>对应一个对象

3.3测试

Spring容器被创建时就创建对象,通过getBean方法可以获取该对象,通过getBeanDefinationNames可以获取所有Spring管理的对象的名字;

public static void main(String[] args) {

// 获取Spring容器对象

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

// 从容器中获取对象

Person person = context.getBean("person", Person.class);

person.show();

String[] names = context.getBeanDefinitionNames();

System.out.println(Arrays.toString(names));

context.close();

}

4。Ioc(inversion of control)

Ioc ,控制反转,控制指的是创建对象的操作,反转指的是将创建对象的操作交给spring来管理,由Spring来创建和管理对象的过程被称之为Ioc;

4.1 使用无参构造器

使用无参构造器(默认), 要求实体类必须提供无参构造器.

4.2 使用有参构造器

使用有参有参构造器, 需要通过constructor-arg标签配置

a) name: 参数名

b) index: 参数索引

c) type: 参数类型

d) value: 参数值, 用于基本数据类型和String

e) ref: 引用, 用于对象类型

<bean id="person2" class="com.bjsxt.pojo.Person">

<constructor-arg name="name" index="0" type="java.lang.String" value="张三" />

<constructor-arg name="age" index="1" type="java.lang.Integer" value="18" />

</bean>

4.3 使用静态工厂

获取对象的方法是静态方法的工厂称之为静态工厂

public class PersonFactory {

public static Person getBean() {

System.out.println("PersonFactory.getBean()");

return new Person();

}

}

在配置文件中, 通过class属性和factory-method属性指定使用静态工厂的对应方法创建对象

<bean id="person3" class="com.bjsxt.factory.PersonFactory" factory-method="getBean"></bean>

4.4 实例工厂(动态工厂)

获取对象的方法是实例方法的工厂称之为实例工厂(动态工厂)

public class Person2Factory {

public Person getBean() {

System.out.println("Person2Factory.getBean()");

return new Person();

}

}

在配置文件中先配置工厂对象, 再通过factory-bean指定工厂, 通过factory-method指定方法创建对象

<bean id="factory" class="com.bjsxt.factory.Person2Factory"></bean>

<bean id="person4" factory-bean="factory" factory-method="getBean"></bean>

1. DI(Dependency Injection)

依赖注入. 注入指的是给对象的属性赋值的过程; 依赖指的是依赖由Spring管理的bean对象. 是IoC的一部分.

5.1 构造器注入

在创建对象时, 通过构造器为对象的属性进行赋值. 参照IoC中的有参构造器的方式.

5.2 设值注入

通过调用setter方法为对象的属性赋值的过程.

<?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="person" class="com.bjsxt.pojo.Person">

<property name="name" value="李四"></property>

<property name="age">

<value>20</value>

</property>

<property name="list">

<list>

<value>aaa</value>

<value>bbb</value>

<value>ccc</value>

<value>ddd</value>

</list>

</property>

<property name="teacher" ref="teacher" />

</bean>

<bean id="teacher" class="com.bjsxt.pojo.Teacher">

<property name="name" value="张老师"/>

<property name="age" value="50"/>

</bean>

</beans>

2. Spring整合MyBatis

6.1 优点

a) 不需要再定义MyBatis的配置文件了

b) 很多对象不需要程序员去创建, 只需要给出配置即可

6.2 缺点

需要导入额外的jar包

asm-3.3.1.jar

cglib-2.2.2.jar

commons-logging-1.1.1.jar

javassist-3.17.1-GA.jar

jstl-1.2.jar

log4j-1.2.17.jar

log4j-api-2.0-rc1.jar

log4j-core-2.0-rc1.jar

mybatis-3.2.7.jar

mybatis-spring-1.2.3.jar

mysql-connector-java-5.1.30.jar

slf4j-api-1.7.5.jar

slf4j-log4j12-1.7.5.jar

spring-aop-4.1.6.RELEASE.jar

spring-beans-4.1.6.RELEASE.jar

spring-context-4.1.6.RELEASE.jar

spring-core-4.1.6.RELEASE.jar

spring-expression-4.1.6.RELEASE.jar

spring-jdbc-4.1.6.RELEASE.jar

spring-tx-4.1.6.RELEASE.jar

spring-web-4.1.6.RELEASE.jar

standard-1.1.2.jar

6.3 编写配置文件

Spring整合MyBatis的配置文件

<?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="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="driverClassName" value="com.mysql.jdbc.Driver" />

<property name="url" value="jdbc:mysql://localhost:3306/java505" />

<property name="username" value="root" />

<property name="password" value="root" />

</bean>

<!-- 配置SqlSessionFactory对象, 在mybatis-spring.jar中 -->

<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">

<!-- 注入数据源 -->

<property name="dataSource" ref="dataSource" />

<!-- 给类定义别名 -->

<property name="typeAliasesPackage" value="com.bjsxt.pojo" />

</bean>

<!-- Mapper扫描器, 在mybatis-spring.jar中 -->

<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<!-- 指定到哪个包进行扫描 -->

<property name="basePackage" value="com.bjsxt.mapper" />

<!-- 指定SqlSessionFactory -->

<property name="sqlSessionFactory" ref="factory" />

</bean>

<!-- 配置service对象 -->

<bean id="studentService" class="com.bjsxt.service.impl.StudentServiceImpl">

<!-- 注入mapper对象 -->

<property name="studentMapper" ref="studentMapper" />

</bean>

</beans>

6.4 注意事项

a) service实现类中需要提供mapper对象, 并提供setter方法;

b) servlet中不能自己创建service对象, 应该从Spring容器中取对象, 否则会报空指针.

c) 可以配置监听器实现配置文件的加载, 优化Servlet的代码

<!-- 全局配置参数, 指定Spring配置文件的位置 -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:applicationContext.xml</param-value>

</context-param>

<!-- 配置Spring的监听器 -->

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

@WebServlet("/student")

public class StudentServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

private StudentService studentService;

@Override

public void init() throws ServletException {

ApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());

studentService = context.getBean("studentService", StudentServiceImpl.class);

}

@Override

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

List<Student> list = studentService.selAll();

req.setAttribute("list", list);

req.getRequestDispatcher("/student.jsp").forward(req, resp);

}

}

Spring容器的更多相关文章

  1. 一则spring容器启动死锁问题(DefaultListableBeanFactory/DefaultSingletonBeanRegistry)

    线上发现一个问题,应用在启动时会卡死,log上并没有什么异常输出,初判应该是死锁问题. 抓现场的thread dump文件, 确实是有两个线程有deadlock问题. 线程一 "HSFBiz ...

  2. Spring容器深入(li)

    spring中最常用的控制反转和面向切面编程. 一.IOC IoC(Inversion of Control,控制倒转).对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的 ...

  3. 通过单元测试理解spring容器以及dubbo+zookeeper单元测试异常处理

    一.先说一个结论:单元测试与主项目的spring容器是隔离的,也就是说,单元测试无法访问主项目spring容器,需要自己加载spring容器. 接下来是代码实例,WEB主项目出于运行状态,单元测试中可 ...

  4. 同时使用Junit4的@Parameterized参数化测试和Spring容器

    转载:http://www.jianshu.com/p/d191fe54915f 整合Spring容器 @SpringApplicationConfiguration(classes = Applic ...

  5. Spring 容器

    Spring提供了两个核心接口:BeanFactory和ApplicationContext,其中applicationContext是BeanFactory的子接口. 他们都可代表Spring容器, ...

  6. Spring-Context之四:Spring容器及bean的定义

    Spring框架的核心功能之一就是控制反转(Inversion of Control, IoC),也叫做依赖注入(dependency injection, DI).关于依赖注入的具体内容可以参见Ma ...

  7. spring容器对bean生命周期的管理三中方式

    spring容器对bean的生命周期管理主要在两个时间点:bean的初始化完成(包括属性值被完全注入),bean的销毁(程序结束,或者引用结束)方式一:使用springXML配置中的init-meth ...

  8. spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)转

    关键字:spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) 应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用 ...

  9. 整合Servlet到Spring容器

    有时在Spring(3.2.5)项目中,如果使用到Servlet,可能希望Servlet实例作为bean受Spring容器管理,这样也能自动注入其他需要的bean,查了下,发现只针对过滤器提供了代理类 ...

  10. spring容器初始化执行某个方法

    在做web项目开发中,尤其是企业级应用开发的时候,往往会在工程启动的时候做许多的前置检查. 比如检查是否使用了我们组禁止使用的Mysql的group_concat函数,如果使用了项目就不能启动,并指出 ...

随机推荐

  1. Linux 工程向 Windows 平台迁移的一些小小 tips

    Linux 工程向 Windows 平台迁移的一些小小 tips VS2013 C++11 Visual Studio 2013 没有做到对 C++11 所有的支持,其中存在的一个特性就是 In-cl ...

  2. Linux自启动执行脚本方法

    1. 在/etc/rc.d/init.d/下创建脚本,要遵守service script的标准: 例如: vi /etc/rc.d/init.d/gfs #!/bin/bash#case " ...

  3. 心路历程(一)-自学java两个月心得

    这是我的第一条博文,在敲这些文字的时候我已经是一名大四的"老者".说自己"老者"确实如此,因为以前每当这个时候大一新学妹有上架了,哈哈,每当这个时候我们就想了很 ...

  4. scala的map操作

    新建一个不定参数的 map: var cs = mutable.Map.empty[String, String] 对其进行赋值: cs += (key -> value) 读取里面所有的 ke ...

  5. Django+Bootstrap+Mysql 搭建个人博客(三)

    3.1.分页功能 (1)views.py from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger def make ...

  6. .NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程

    写在前面 这篇我们对用户权限进行极简设计并保留其扩展性.首先很感谢大家的阅读,前面六章我带着大家快速入门了ASP.NET Core.ASP.NET Core的启动过程源码解析及配置文件的加载过程源码解 ...

  7. 【朝花夕拾】Lint使用篇

    工作中Lint工具使用实录及整理       AndroidStudio内置的Lint工具,对app中的代码规范带来了极大的方便.对内存泄漏.代码冗余.代码安全.国际化.代码规范等很多方面都能检测,是 ...

  8. 什么是LogDashboard?

    What is LogDashboard 接上篇 LogDashboard是可视化的日志面板,摆脱了传统查看txt与数据库的方式. 使查看日志变的简单方便并且可供分析 基于Net Core中间件编写适 ...

  9. github总结(4)--关于git reset --hard这个命令的惨痛教训

    背景叙述: 前几天,上传自己的个站到git上的时候,手欠脑发晕的用了次git reset --hard xxxxxx 命令.由于只在线上传入了一个index.html页面(自己都不知道自己咋想的,就这 ...

  10. sed从入门到深入的使用心得

    本人已经此系列的sed文章整理到pdf中,欢迎下载:玩透sed:探究sed原理 sed系列文章: sed修炼系列(一):花拳绣腿之入门篇sed修炼系列(二):武功心法(info sed翻译+注解)se ...