一:spring介绍
Spring 的核心是控制反转 (IoC)和面向切面(AOP)。简单来说,Spring 是一个分层的 JavaSE/EEfull-stack(一站式) 轻量级 开源框架。
二:spring项目搭建导包以及创建对象并注册到容器测试
创建对象准备:
1.
package cn.itcast.bean;
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
2.配置xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<bean name="user1" class="cn.itcast.bean.User"></bean>
</beans>
3.测试:
package cn.itcast.a_hello;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.itcast.bean.User;
public class Demo {
@Test
public void fun1(){
//创建容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/bean/applicationContext.xml");
//像容器要User对象
User user = (User) ac.getBean("user");
//打印USer对象
System.out.println(user);
}
}
三:IOC & DI
IOC :控制反转,将对象的创建权交给了 Spring.
DI :Dependency Injection 依赖注入.需要有 IOC 的环境,Spring 创建这个类的过程中,Spring 将类的依 赖的属性设置进去.
六:BeanFactory&ApplicationContext
BeanFactory&ApplicationConte都是容器
ApplicationConte包括:
- ClassPathXmlApplicationContext :加载类路径下 Spring 的配置文件.
- FileSystemXmlApplicationContext :加载本地磁盘下 Spring 的配置文件
BeanFactory&ApplicationConte区别:
- BeanFactory :是在 getBean 的时候才会生成类的实例.
- ApplicationContext :在加载 applicationContext.xml(容器启动)时候就会创建.
四:Bean
1属性
id属性:Bean 起个名字. 在约束中采用 ID 的约束:唯一.必须以字母开始,可以使用字母、数字、连字符、 下划线、句话、冒号 id:不能出现特殊字符.
name属性::Bean 起个名字. 没有采用 ID 的约束. name:出现特殊字符.如果没有 id 的话 , name 可 以当做 id 使用.
scope属性:
- singleton :默认值,单例的.
- prototype :多例的.
- request :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中.
- session :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中.
- globalSession :WEB 项目中,应用在 Porlet 环境.如果没有 Porlet 环境那么 globalSession 相当 于 session.
bean的生命周期配置:
通过配置标签上的 init-method 作为 Bean 的初始化的时候执行的方法,配置 destroy-method 作为 Bean 的销毁的时候执行的方法。 销毁方法想要执行,需要是单例创建的 Bean 而且在工厂关闭的时候,Bean 才会被销毁.
五:spring三种对象的创建
总共有三种方式:
- 无参构造
- 静态构造
- 动态构造
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<!--构建方式一空参构造-->
<bean name="user1" class="cn.itcast.bean.User"></bean>
<!--构造方式二,使用静态工厂进行构造 -->
<bean name="user2" class="cn.itcast.b_create.UserFactory" factory-method="createUser"></bean>
<!-- 构造方式三:动态构造 -->
<bean name="user3" factory-bean="userFactory" factory-method="createUser2"></bean>
<bean name="userFactory" class="cn.itcast.b_create.UserFactory" ></bean>
</beans>
package cn.itcast.b_create;
import cn.itcast.bean.User;
public class UserFactory {
public static User createUser(){
System.out.println("静态工厂创建对象");
return new User();
}
public User createUser2(){
System.out.println("实例工厂创建对象");
return new User();
}
}
package cn.itcast.b_create;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.itcast.bean.User;
public class Demo {
@Test
public void fun1(){
//创建容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/b_create/applicationContext.xml");
//像容器要User对象
User user = (User) ac.getBean("user1");
//打印USer对象
System.out.println(user);
}
@Test
public void fun2(){
//创建容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/b_create/applicationContext.xml");
//像容器要User对象
User user = (User) ac.getBean("user2");
//打印USer对象
System.out.println(user);
}
@Test
public void fun3(){
//创建容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/b_create/applicationContext.xml");
//像容器要User对象
User user = (User) ac.getBean("user3");
//打印USer对象
System.out.println(user);
}
}
六:属性注入的三种方式
- set方法
值类型set方法注入:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<bean name="user1" class="cn.itcast.bean.User">
<property name="name" value="ssl"></property>
<property name="age" value="21"></property>
</bean>
</beans>
package cn.itcast.bean;
public class User {
private String name;
private Integer age;
public User(){
System.out.println("空参构造");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}
package cn.itcast.c_injection;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.itcast.bean.User;
public class Demo {
@Test
public void fun1(){
//创建容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/c_injection/applicationContext.xml");
//像容器要User对象
User user = (User) ac.getBean("user1");
//打印USer对象
System.out.println(user);
}
}
对象类型注入:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<bean name="user1" class="cn.itcast.bean.User">
<property name="name" value="ssl"></property>
<property name="age" value="21"></property>
<!-- 为car属性注入下方配置的car对象 -->
<property name="car" ref="car"></property>
</bean>
<!-- 将Car对象配置到容器中 -->
<bean name="car" class="cn.itcast.bean.Car">
<property name="name" value="宾利"></property>
<property name="color" value="红色"></property>
</bean>
</beans>
package cn.itcast.bean;
public class User {
private String name;
private Integer age;
private Car car;
public User(){
System.out.println("空参构造");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", car=" + car + "]";
}
}
package cn.itcast.bean;
public class Car {
private String name;
private String color;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Car [name=" + name + ", color=" + color + "]";
}
}
package cn.itcast.c_injection;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.itcast.bean.User;
public class Demo {
@Test
public void fun1(){
//创建容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/c_injection/applicationContext.xml");
//像容器要User对象
User user = (User) ac.getBean("user1");
//打印USer对象
System.out.println(user);
}
}
2.构造函数注入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<bean name="user1" class="cn.itcast.bean.User">
<property name="name" value="ssl"></property>
<property name="age" value="21"></property>
<!-- 为car属性注入下方配置的car对象 -->
<property name="car" ref="car"></property>
</bean>
<!-- 将Car对象配置到容器中 -->
<bean name="car" class="cn.itcast.bean.Car">
<property name="name" value="宾利"></property>
<property name="color" value="红色"></property>
</bean>
<!-- ============================================== -->
<!-- 构造函数注入 -->
<!-- name属性 :构造函数的参数名 -->
<!-- index属性:构造参数的参数索引 -->
<!-- type属性:构造函数的参数类型 -->
<bean name="user2" class="cn.itcast.bean.User">
<constructor-arg name="name" value="18" index="0" type="java.lang.Integer"></constructor-arg>
<constructor-arg name="car" ref="car" index="1"></constructor-arg>
</bean>
</beans>
3.spel注入:
4.p名空间注入:
第一步:导入p命名空间:
xmlns:p="http://www.springframework.org/schema/p"
第二步:使用 p 名称空间.
*普通属性: p:属性名称=”值”
对象类型属性: p:属性名称-ref=”bean名称”
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<bean name="user1" class="cn.itcast.bean.User">
<property name="name" value="ssl"></property>
<property name="age" value="21"></property>
<!-- 为car属性注入下方配置的car对象 -->
<property name="car" ref="car"></property>
</bean>
<!-- 将Car对象配置到容器中 -->
<bean name="car" class="cn.itcast.bean.Car">
<property name="name" value="宾利"></property>
<property name="color" value="红色"></property>
</bean>
<!-- ============================================== -->
<!-- 构造函数注入 -->
<!-- name属性 :构造函数的参数名 -->
<!-- index属性:构造参数的参数索引 -->
<!-- type属性:构造函数的参数类型 -->
<bean name="user2" class="cn.itcast.bean.User">
<constructor-arg name="name" value="18" index="0" type="java.lang.Integer"></constructor-arg>
<constructor-arg name="car" ref="car" index="1"></constructor-arg>
</bean>
<!-- ==================================== -->
<!-- p名空间注入 -->
<bean name="user3" class="cn.itcast.bean.User" p:name="ssl" p:age="20" p:car-ref="car"></bean>
</beans>