我们现在讲的spring,其实是spring framework,进行对象的管理。
其他还有spring boot ,功能是让你近可能快的开发,基本上可以做到0配置开发,因为里面有许多默认配置,所以初学者不能从他开始学起,但他比较流行。
还有spring cloud ,也就是spring云
等等
我们要学习的是spring framwork
我们需要大约20个包。
aop是做我们aop(切面)的
aspect也是做切面的
beans是我们的基础包
context是用来…呃
core是核心包
jdbc是spring支持对数据库操作,但使用spring本身不需要。
test测试模块
tx是事务
web和webmvc是做springmvc时用的
这些包是jar包,说明文档,源码三份一起的。
那么spring是什么呢?
Spring 是一个轻量级的控制反转(IoC)和面向切面编程(AOP)的容器框架
spring的特点
⚫轻量—从大小与开销两方面而言 Spring 都是轻量的。完整的 Spring 框架可以在一
个大小只有 1MB 多的 JAR 文件里发布。并且 Spring 所需的处理开销也是微不足道
的。
⚫ 非侵入 ——在应用中,一般不需要引用 springjar 包里的类。
⚫ 控制反转——Spring 通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了
IoC,某一接口的具体实现类的选择控制权从调用类中移除,转交给第三方裁决。
将控制权交给接口–面向接口的编程
核心技术就是 DI 容器(依赖注入)
⚫ 面向切面(AOP)——Spring 提供了面向切面编程的丰富支持,允许通过分离应用的
业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。
应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责其它
的系统级关注点,例如日志或事务支持
为什么要使用spring?
1、降低组件之间的耦合度,实现各层之间的松耦合
2、容器还提供了多种设计模式,比如单例模式
3、容器提供了AOP技术,可以非常容易的实现权限、事务管理等等
4、对其他主流框架的兼容,如:集成Hibernate、JPA、Struts等,更便于开发
5、容器提供众多辅佐类,使用这些类能够加快应用的开发,如:
JdbcTemplate、 HibernateTemplate等
6、可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当
我们使用容器管理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事
务传播。
spring 入门项目
先创建一个java项目(使用的是eclipse)
然后导包,现在只导入基本的(其中的junit是测试需要用的,可以网上查一下)
核心配置文件或者是核心类 | 作用 |
---|---|
核心配置文件:*.xml(applicationContext.xml默认) | 用于配置所有的类,这些类称为springBean |
核心类 : BeanFactory(接口) | 容器的工厂类,用于创建或者是获取springBean,也就是被spring配置文件中的类 |
applicationContext(接口) | 它是BeanFactory的子类,叫做应用上下文,它的功能比BeanFactory更加强大 |
(后两者的区别:第一种是懒加载,定义好放进去,使用时再加载,第二种是非懒加载,定义好,直接加载以供使用)
(要求启动得快,用懒加载,要求响应速度快,就使用非懒加载)
我们开始做项目
建一个Person类,放个属性,放个方法
package com.cbb.bean;
/**
* 类描述:被spring管理
* 作者: 地铁与人海
* 创建日期:2019年3月11日
* 修改人:
* 修改日期:
* 修改内容:
* 版本号: 1.0.0
*/
public class Person {
private String name;
public void eat() {
System.err.println(name+":eatting...");
}
@Override
public String toString() {
return "Person [name=" + name + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
再写一个类使用原来的方式调用方法
package com.cbb.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.cbb.bean.Car;
import com.cbb.bean.Person;
import com.cbb.bean.User;
/**
* 类描述:调用方法
* 作者: 地铁与人海
* 创建日期:2019年3月11日
* 修改人:
* 修改日期:
* 修改内容:
* 版本号: 1.0.0
*/
public class BeanTest {
@Test
public void test() {
Person p = new Person();
p.setName("hijack");
p.eat();
}
}
如果我们只定义如:
Person p = null;
下面两条语句就无法运行。
我们要实现的,就是之定义,就可以使用
我们想要实现这种效果,就要将Person配置到核心xml文件中。
我们创建一个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">
</beans>
我们开始在<beans>
标签里面进行配置
<!--配置的第一个spring类
相当于Person person = new Person();
class:要配置的类 id: 唯一标识
-->
<bean id ="person" class="com.cbb.bean.Person"></bean>
然后我们开始使用,还是在BeanTest类中,条件在注释中
@Test
public void test2() {
//加载spring的核心配置文件,初始化spring容器,创建springbean的实例
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取容器实例化的对象
Person p = (Person)ctx.getBean("person");
//调用方法测试
p.setName("rose");
p.eat();
}
我们可以通过这两个实现类实例化
ClassPathXmlApplicationContext : 用于在 classpath 下加载 xml 配置文件,
例如classpath:a.xml
FileSystemXmlApplicationContext: 用于加载文件系统中的 xml 配置文件,
例如 d:/a.x
getBean()方法有多个重载方法。使用它获取实例时需要强转一下。
然后就可以用了
也可以获取的时候直接进使用
Person p = ctx.getBean("person",Person.class);
这样就不用进行强转了。
END