一:spring介绍

Spring 的核心是控制反转 (IoC)和面向切面(AOP)。简单来说,Spring 是一个分层的 JavaSE/EEfull-stack(一站式) 轻量级 开源框架。

二:spring项目搭建导包以及创建对象并注册到容器测试

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);
	}
}

 

六:属性注入的三种方式

  1. 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>

 

相关文章:

  • 2022-02-17
  • 2021-11-15
  • 2021-10-31
  • 2022-12-23
  • 2022-12-23
  • 2021-10-20
  • 2021-08-01
猜你喜欢
  • 2021-07-22
  • 2021-06-19
  • 2022-12-23
  • 2021-07-07
  • 2022-12-23
  • 2022-01-11
  • 2021-10-23
相关资源
相似解决方案