Spring是一个轻量级的框架,相当于一个平台性质,大大简化了Java企业级应用的开发,提供了强大的、稳定的功能。Spring框架大约由20个功能模块组成,这些模块被分为6个部分,如图所示:
Spring Core是最基础部分,提供了IOC特性;Spring AOP是基于Spring Core的符合规范的面向切面编程的实现。
Spring IOC容器是Spring最核心的部分,IOC(Inversion of Control),控制反转,也被称为依赖注入,是面向对象编程中的一种设计理念,用来降低程序代码之间的耦合度。3.添加jar包:
spring-aop-4.1.4.RELEASE.jar
spring-beans-4.1.4.RELEASE.jar
spring-context-4.1.4.RELEASE.jar
spring-context-support-4.1.4.RELEASE.jar
spring-core-4.1.4.RELEASE.jar
spring-expression-4.1.4.RELEASE.jar
commons-logging.jar//此jar包为第三方类库,需要自行下载
4.src下创建spring-config.xml文件(名字可以自己取),创建Student类、test类
(1)Student类:
package com.wzj.entity;
public class Student {
private int id;
private String name;
//省略get、set方法
//为了方便显示,重写了toString方法
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
(2)spring-config.xml文件的配置:
(3)test类:
package com.wzj.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.wzj.entity.Student;
public class Test {
public static void main(String[] args) {
//通过ApplicationContext接口的实现类实例化Spring上下文对象
ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
//通过getBean()方法来获取到Student类的对象
Student student=(Student)context.getBean("student");
System.out.println(student);
}
}
(4)运行结果:
Student [id=1, name=张三]
ApplicationContext 面向使用 Spring 框架的开发者,几乎所有的应用场合都直接使用 ApplicationContext 而非底层的 BeanFactory
ApplicationContext的实现类:
—— ClassPathXmlApplicationContext:从 类路径下加载配置文件
—— FileSystemXmlApplicationContext: 从文件系统中加载配置文件
//getBean()的参数名称要和配置文件中bean的id对应
Student student=(Student)context.getBean("student");
在spring 4以上版本,支持直接传递类型,不用强制转换,不过为了和低版本兼容,慎用:
Student student=context.getBean("student",Student.class);
value也可以作为子标签:
张三
index属性:表示参数的顺序(可以不写,但是顺序要一致,最好写上)
如果说类中不止有一个构造方法的时候,为了防止容器不知道调用哪个,可以为参数指定类型type(方法重载的区别不就是看参数的区别么)
type和index可以混合使用
创建Teacher类,Student类中包含Teacher的属性,配置:
②定义内部bean:
同样如果使用构造器注入的方式,同样使用ref属性进行引用。
②使用
注意:为teacher的属性赋值前,teacher属性一定要初始化,不然会抛异常
在list标签中可以使用、
value、或者其他什么内部Bean、构造器等等的使用方式跟前面一样。
值
值
每个prop子标签必须定义key属性
①导入命名空间:
xmlns:util="http://www.springframework.org/schema/util"
若 IOC 容器中有多个与目标 Bean 类型一致的 Bean. 在这种情况下, Spring 将无法 判定哪个 Bean 最合适该属性, 所以不能执行自动装配.(2)byName(根据名称自动装配):
必须将目标 Bean 的名称和属性名设置的完全相同.(3)constructor(通过构造器自动装配):
当 Bean 中存在多个构造器时, 此种自动装配方式将会很复杂. 不推荐使用例:
①可以使用Bean元素的parent属性指定其父Bean,则其成为子Bean
②子Bean可以继承父Bean的配置,也可以覆盖父Bean的配置
③父Bean也可以作为一个模板,使用abstract="true"设置,此时这个父Bean不能被实例化,只能当配置模板被继承(类似于Java中的抽象类)
④如果说一个bean的class属性没有设置,那么这个bean必须是一个模板bean(即abstract为true)
⑤不是父Bean所有的属性子Bean都能继承,比如:abstract="true",autowire等
1.spring可以通过 depends-on属性指定这个bean依赖的bean,如果说spring配置中不存在被依赖的bean,则初始化这个Bean的时候就会报错。
2.如果前置依赖于多个Bean,则可以通过逗号、空格的方式配置Bean的名称。
使用Bean元素的scope属性来配置作用域
(1) singleton:默认值,容器初始化时创建实例,在整个生命周期中只创建一个实例,单例!
(2) prototype:原型的,容器初始化时不创建实例,而在每次使用getBean的时候都创建一个新的实例、
(3) request:没次Http请求时都创建一个新的Bean,该作用域仅作用域WebApplicationContext环境
(4) session:同一个HttpSession共用一个Bean,不同的session使用不用的Bean
driverclass=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=scott
password=tiger
(2)在spring配置文件中导入context命名空间后首先配置:
然后使用的时候使用${var}的方式:
①整数:
②小数:
③科学计数法:
④String可以使用单引号或者双引号作为字符串的定界符号:
或
⑤Boolean:
其他使用类似
②加号还可以作为字符串连接:
③比较运算符:<, >, ==, <=, >=, lt, gt, eq, le, ge