- Spring简介
(1)框架 : 高度抽取可重用代码/半成品软件
(2)容器(可以管理所有的组件(类) 框架 核心关注:IOC(DI)和AOP容器框架.
(3) Spring的framework
Test: 单元测试功能
spring-test-4.0.0.RELEASE.jar
Core Container: 核心容器ioc 黑色为这部分功能为那些jar包组成
spring-beans-4.0.0.RELEASE.jar spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar spring-expression-4.0.0.RELEASE.jar
AOP+Aspect:面向切面
spring-aop-4.0.0.RELEASE.jar
数据访问/访问数据库
spring-jdbc-4.0.0.RELEASE.ja r
spring-orm(object-relation-mapping)-4.0.0.RELEASE.ja
spring-ts-4.0.0.RELEASE.jar(事务)
集成
spring-oxm(object xml mapping)-4.0.0.RELEASE.ja
spring-jms-4.0.0.RELEASE.jar
web:Spring开发web应用
spring-websocket-4.0.0.RELEASE.ja
spring-web-4.0.0.RELEASE.jar(原生web)
spring-webmvc-4.0.0.RELEASE.jar(开发web项目)
spring-webmvc-portlet-4.0.0.RELEASE.jar(开发web应用的组件集成)
ioc: inversion of Control 控制反转
控制(资源的获取方式
(1)主动式:new–要资源自己创立)
(2)被动式:资源的获取都是容器来创建设置)
容器:管理所有组件(有功能的类),主动的new资源变为被动的接受资源
DI(dependency injection )依赖注入
容器能知道哪个组件(类)运行的时候,需要另外一个类(组件) ; 容器通过反射的形式,将容器中准备好的BookService对象注入(利用反射给属性赋值)到BookServlet中;
- 初步使用Hello World
现在:在容器里面注册组件
框架编写流程:
(1)导包 (加入测试的包 bean/core/ep)
(2)写配置
spring的配置文件中,集合了所有ioc容器管理的所有组件
创建spring bean configuration file 配置文件
(3)测试
eg:helloworld — 测试容器功能
配置ioc.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">
<!-- 组测一个person对象,spring会自动创建 -->
<!-- 一个Bean标签可以注册一个组件(对象、类)
class写要注册的组件的全类名
id:这个对象的唯一标识
-->
<bean id="person1" class="com.bean.person">
<!--使用property标签为Person对象的属性赋值-->
<property name="lastname" value="张三"></property>
<property name="age" value="18"></property>
<property name="email" value="36023"></property>
<property name="gender" value="男"></property>
</bean>
</beans>
person.java
package com.bean;
public class person {
private String lastname;
private Integer age;
private String gender;
private String email;
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "person [lastname=" + lastname + ", age=" + age + ", gender=" + gender + ", email=" + email
+ ", getLastname()=" + getLastname() + ", getAge()=" + getAge() + ", getGender()=" + getGender()
+ ", getEmail()=" + getEmail() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode()
+ ", toString()=" + super.toString() + "]";
}
/**
* @return the lastname
*/
public String getLastname() {
return lastname;
}
/**
* @param lastname the lastname to set
*/
public void setLastname(String lastname) {
this.lastname = lastname;
}
/**
* @return the age
*/
public Integer getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(Integer age) {
this.age = age;
}
/**
* @return the gender
*/
public String getGender() {
return gender;
}
/**
* @param gender the gender to set
*/
public void setGender(String gender) {
this.gender = gender;
}
/**
* @return the email
*/
public String getEmail() {
return email;
}
/**
* @param email the email to set
*/
public void setEmail(String email) {
this.email = email;
}
}
测试
package com.bean.test;
import static org.junit.Assert.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.bean.person;
import org.junit.Test;
public class ioctest {
/*
*从容器中拿到这个组件
*/
@Test
public void test() {
//ApplicationContext. 代表ioc容器
//当前应用的xml配置文件在
//ioc.xml 清单
//根据spring的配置文件得到ioc容器对象
ApplicationContext ioc= new ClassPathXmlApplicationContext("ioc.xml");
person bean = (person) ioc.getBean("person1");
System.out.println(bean);
}
}
总结