Spring框架简介和简单使用

2023-05-16

Spring框架

Spring是一个开源的框架,为简化企业级应用开发而生,它的理念包括 IOC (Inversion of Control,控制反转) 和 AOP(Aspect Oriented Programming,面向切面编程)。

Spring框架结构图
幻羽陆
IOC(inversion of control)反转控制
控制: 其实就是或去资源的方式,一般有主动方式就是要什么对象(资源)都是由我们自己去创建;被动方式就是资源的获取都不是我们自己去创建,而是交给一个容器来创建和设置
容器: 管理所有的组件(有功能的类的对象),容器可以自动的探查出那些组件需要用到另一些组件,并且帮我们创建出来,并把对象赋值过去;
容器让我们以前主动的new资源变为了被动的接受资源
DI(依赖注入): 容器能知道那个组件运行的时候,需要另一个类;容器同过反射的形式,讲容器中准备好的组件注入(利用反射给属性赋值)到对象中;

Spring 第一个程序的编写步骤:
1、导包

2、在src目录下编写一个Person类

public class Person {
	private String name;
	private Integer age;
	
	public Person() {
		super();
	}

	public Person(String name, Integer age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
、turn 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 "Person [name=" + name + ", age=" + age + "]";
	}
	
}

3、写配置,在创建类路径下创建一个Spring bean configration的文件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">

<bean id="person" class="cn.lyh.bean.Person">
<property name="name" value="李四"></property>
<property name="age" value="18"></property>
</bean>

</beans>

4、创建一个测试类去测试代码

public class IOCTest {

	@Test
	public void test() {
		 ApplicationContext ioc = new ClassPathXmlApplicationContext("ApplictionContext.xml");
		 Person bean = ioc.getBean(Person.class);
		 System.out.println(bean);
	}
}

注意:
1、src是源码包的开始路径,所有源码包里面的东西都会被合并放到类路径中(Java的类路径为/bin;web 的类路径为/web-inf/class/
2、容器中的组件(对象),在容器启动的时候就开始创建。
3、同一个组件在IOC内部一般默认都是单实例。
4、 如果容器中没有这个组件,获取组件会报No such BeanDefinitionException 异常
5、容器创建的时候用Set的方法给属性赋值,JavaBean的属性名由set方法后的首字母小写

IOC中简单的用法
1.给容器中添加组件

①. 根据属性给容器添加组件
容器创建的时候用Set的方法给属性赋值,JavaBean的属性名由set方法后的首字母小写

<bean id="person" class="cn.lyh.bean.Person">
	<property name="name" value="李四"></property>
	<property name="age" value="18"></property>
</bean>

②.根据构造函数给容器中添加组件

<bean id="p2" class="cn.lyh.bean.Person">
	<constructor-arg name="name" value="张三">  </constructor-arg>//name属性是参数名称,value属性是参数对应的值
	<constructor-arg name="age" value="28"></constructor-arg>
</bean>

可以省略name属性,但是必须按照构造器的参数位置传参

<bean id="p3" class="cn.lyh.bean.Person">
	<constructor-arg value="王五"></constructor-arg>
	<constructor-arg value="38"> </constructor-arg>
</bean>

可以使用Index属性来指定参数的位置
重载的情况下可以使用type来指定参数的类型,type=“java.lang.Integer”;

<bean id="p4" class="cn.lyh.bean.Person">
	<constructor-arg index="1" value="48"></constructor-arg>
	<constructor-arg index="0" value="赵六"></constructor-arg>
</bean>

③.同过P名称空间来为Bean赋值
在ioc.xml 下选择Namespace再在Namespace中选上p标配,返回到source
在这里插入图片描述

<bean id="p6" class="cn.lyh.bean.Person" p:name="田七" p:age="58"></bean>

④. 通过继承实现bean配置信息的重用

<!-- 父组件 -->
<bean id="p" class="cn.lyh.bean.Person" abstract="true" p:age="22"></bean>
<!-- 子组件 -->
<bean id="p5" parent="p" p:name="子组件" ></bean>

注意:
a.如果 bean 有abstract= “true",则只能被别人继承(不会被实例化)
b.如果一个bean的class属性没有指定,则必须是抽象bean

2、同过类型从IOC容器中获取bean实例
如果容器中只有一个该类型的bean时,可以使用ioc.getBean(类名.class)来获取组件。如果容器中有多个该类型的组件时可以使用ioc.getBean(“id”)来过取组件(但是获得到的组件的类型是Object型,需要通过类型转换才能变成Person型),也可以用 ioc.getBean(“person”,Person.class)来来获得,得到直接是一个Person型。
Bean之间的依赖,一般情况下Bean对象会根据配置文件中的顺序自动创建,如果在创建一个bean对象时,要求另一个bean也要被创建,则可以添加属性 depends-on=”bean1,bean2,…"来改变bean的创建顺序.

Person bean = ioc.getBean(Person.class)
Person bean = ioc.getBean("person",Person.class)//第一个person是ioc中组件的id

3.bean的作用域
bean的作用域:可以在scope属性中设置,bean的作用域,决定这个bean是单实例还是多实例.一般默认为单实例;
singleton(单例): 在SpringIoc容器中仅存在一个Bean实例,bean以单实例的凡是存在
prototype(多例): 没次调用getBean() 时都会返回一个新的实例;
request: 每次Http请求都会创建一个实例
session: 每次会话都会拆功能键一个实例
注意: 当bean作用域为单例时,Spring会在创建IOC对象时就创建bean的对象实例,当bean作用域为多实例时,在调用getBean()时创建bean的对象实例.

4.通过工厂创建bean
a.静态工厂: 调用静态工厂的方法去创建bean,直接使用类名,方法名见的调用得到bean对象,不用去实现静态工厂的对象;

实现方式: 申明通过静态方法创建bean需要在bean的class属性中指定静态工厂的全类名,同时在factory-method属性里指定工厂方法的名称,最后使用元素为该方法传递参数.

b.实例工厂 当用户要用实例工厂来创建bean对象时,先要去创建实例工厂的实例然后用工厂的对象去调用创建bea对象的方法,创建bean对象.

实现方式:
a.配置工厂类实例的bean
b.配置备案的对象在bean中设置属性 发出try-bean=“工厂id”,factory_method=“方法名”;最后使用元素为该方法传递参数

FactoryBean: 是Spring规定的一个接口,只要是这个接口的实现类,Spring都认为是一个工厂类
接口中的方法:
①getObject()
②class<?> getObjectType() 返回创建对象的类型
③boolean issingleton() 是否单例 false不是,true是
创建带有生命周期的bean:
可以创建一些生命周期的方法:spring在创建或者销毁的时候就会调用这些方法,自定义的初始化方法和销毁方法必须没有返回值,但是可以抛出异常
在Init_method属性中设置初始化方法,在destroy-method属性中设置销毁方法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring框架简介和简单使用 的相关文章

随机推荐