SSM框架学习-Spring01
1,.Spring介绍
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。
2.功能
1).Spring IOC(DI):依赖注入、控制反转
2).Spring AOP:面向切面编程
3).声明式事务
4).Spring Struts Struts2 SpringMVC表现层整合
5).Sring Transction事物整合;
6).SSH(Spring Struts Hibernate)框架
7).SpringMVC Spring 提供表现层整合;
8).SSM(Spring SpringMVC MyBatis)
IOC:
控制反转:它是程序中的之间的关系,不用代码控制,而完全是由容器来控制。
例如:
在之前我们创建对象的时候,需要New 一下,然后后面接一个类,调用构造方法,这样jvm就会给我们生产一个对象,如:Person person =new Person,这时候就产出了person这个对象。但是有了Spring以后,我们只需要在Bean 里面配置好,就可以使用了;
AOP
它利用一种称为”横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块。
所谓”切面”,简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。
3.Spring运行时环境
Test:提供的一个测试功能;
Core Container:为核心容器,启动Spring的基本文件;
Beans:负责管理对象
Context:上下文参数。获取外部资源或管理注解等
AOP:实现aop功能需要依赖
Aspects:切面AOP依赖的包
Data Access/Integration:spring封装数据访问层的相关内容
JDBC:Spring对JDBC封装后的代码
ORM:封装了一些持久层框架的代码。例如:Hibernate
Transaction:对应spring-tx.jar,声明式 事务使用
WEB:需要spring完成web相关功能时需要。例如:由tomcat加载spring配置文件时需要有spring-web.jar包
1)容器(Container):Spring当做一个大容器
2)BeanFactory接口,老版本,新版本中ApplicationContext接口,是BeanFactory子接口。BeanFactory的功能在ApplicationContext中都有
3)从Spring3开始把Spring框架的功能拆分为多个jar,2以前就一个jar
4.IOC——控制反转
1) IoC完成的事情是不由new实例化对象,而转交给Spring负责,控制指的是控制类的对象,反转指的是转交给Spring负责。
其作用就是——解耦。
程序员不需要管理对象,解除了对象管理和程序员之间的耦合
javabeansXML配置文件:
<?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="flo" class="com.likui.pojo.Flower">
<property name="name" value="牡丹"></property>
<property name="id" value="1"></property>
<property name="price" value="2.0"></property>
<property name="production" value="中国"></property>
</bean>
</beans>
java中得到这个对象:
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
Flower flower = ac.getBean("flo",Flower.class);
System.out.println(flower.getId()+" "+flower.getName()+" "+
flower.getPrice()+" "+flower.getProduction());
结果展示:
2)spring创建对象的三种方式
(1)通过构造方法构建
无参构造方法:默认。
有参构建对象:前提为类中有有参构造器,然后需要在bean中明确配置,
java有参构造器
public Flower(int id, String name, double price, String production) {
this.id = id;
this.name = name;
this.price = price;
this.production = production;
}
javabean中顺序写法
<bean id="flo2" class="com.likui.pojo.Flower">
<!--ref引用另一个bean,value引用基本数据类型
index代表参数索引,name、type和index可以确定使用哪一个有参构造器,默认为最后一个-->
<constructor-arg index="0" name="id" type="int" value="0"> </constructor-arg>
<constructor-arg index="1" name="name" value="月季"> </constructor-arg>
<constructor-arg index="2" name="price" type="double" value="2.5"> </constructor-arg>
<constructor-arg index="3" name="production" value="日本"> </constructor-arg>
</bean>
(2)实例工厂——需要先创建工厂,才能生产对象
工厂模式:帮助创建类对象,一个工厂可以生产多个对象。
一般模板:
public static INoodles createNoodles(int type) {
switch (type) {
case TYPE_LZ:
return new LzNoodles();
case TYPE_PM:
return new PaoNoodles();
case TYPE_GK:
default:
return new GankouNoodles();
}
}
实例工厂具体使用方法:
xml配置文件:利用bean创造工厂类的对象,然后利用这个工厂对象生产相应的对象
<bean id="factory" class="com.likui.pojo.Factory"></bean>
<bean id="rose" factory-bean="factory" factory-method="newInstance2"></bean>
java文件:
public class Factory {
//普通工厂模式代码
public Flower newInstance(String key) {
switch (key) {
case "Flower":
return new Flower();
case "rose":
return new Flower();
default:
return null;
}
}
//使用javabean创建对象
public Flower newInstance2(){
return new Flower(1,"牡丹",3.0,"日本");
}
}
(3)静态工厂——不需要创建工厂就能产生对象
使用具体方法:将工厂类中的方法使用static来使用,不需要创建工厂对象
xml中配置文件:
<bean id="rose2" class="com.likui.pojo.Factory" factory-method="newInstance3"></bean>
3)对对象属性赋值
(1)利用构造器来对属性赋值(前面已有)
(2)利用set方法来赋值,即利用property来利用set方法来注入,基本数据类型或者String,value放里面或者外面都可以
list、set、map用相应的属性标签来一个个给它们进行赋值
<bean id="flo" class="com.likui.pojo.Flower">
<property name="name" value="牡丹"></property>
<property name="id" ><value>1</value></property>
<property name="price" value="2.0"></property>
<property name="production" value="中国"></property>
<property name="list">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
</bean>
5.DI(Dependency injection)——依赖注入
它与IoC功能是一样的,当一个类中需要另一个类的对象时,在类的内部为另一个类对象赋值,就是依赖注入
用法:在类中用property进行赋值时,只需要用ref来引用另一个类的对象,这里的引用对象就是另一个bean
依赖注入类:
public class Factory {
private Flower flower;
public Flower getFlower() {
return flower;
}
public void setFlower(Flower flower) {
this.flower = flower;
}
}
xml配置文件:
<bean id="factory" class="com.likui.pojo.Factory">
<property name="flower" ref="flo2"></property>
</bean>
java中使用方法;
Factory factory=ac.getBean("factory",Factory.class);
System.out.println(factory.getFlower().getName());