我们现在讲的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...");}@Overridepublic 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 {@Testpublic 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/beanshttp://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类中,条件在注释中
@Testpublic 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