Spring学习总结(一)

编程入门 行业动态 更新时间:2024-10-14 06:23:06

<a href=https://www.elefans.com/category/jswz/34/1769862.html style=Spring学习总结(一)"/>

Spring学习总结(一)

Bean标签

用于配置对象交由Spring创建,默认调用无参构造函数
基本属性:
id:Bean实例在Spring容器中的唯一标识
class:Bean的全限定名称

范围配置

scope:对象的作用范围

取值范围说明
singleton默认值单例
prototype多例
<!--一个示例-->
<bean id="userDao" class="com.littlepants.dao.impl.UserDaoImpl" scope="prototype"></bean>

Singleton:当Spring核心文件被加载时,实例化Bean实例,对象在应用加载创建容器时创建,只要容器在,对象就活着,当应用卸载,销毁容器时,对象就被销毁了。
Prototype:有多个实例,当调用getBean()方法时实例化,对象在被使用时创建,对象长时间不使用就被Java垃圾回收器回收了。
request、session、application、websocket:主要用于web应用中。

初始化与销毁

很多时候构造函数无法完成我们需要的初始化操作,这时候就可以使用初始化函数来完成。同理,销毁方法也可以完成一些额外的处理,类似资源处理和销毁回调。

<bean id="userDao" class="com.littlepants.dao.impl.UserDaoImpl" init-method="init" destroy-method="destroy"/>

懒加载

<!--全局设置,应用于所有所有的Bean-->
<beans default-lazy-init="true"></beans><!--个别设置,default属性继承自default-lazy-init-->
<beans id="userDao" class="com.littlepants.dao.impl.UserDaoImpl" lazy-init="true">

deafault-lazy-init 和lazy-init 拥有同样的取值(default, true, false),但是对于default而言,前者相当于false。

Bean定义继承

<!--父类-->
<bean id="people" class="com.little.People"><property name="name" value="张三">
</bean><!--子类-->
<bean id="worker" class="com.little.Worker" parent="people"><property name="company" value="恒大">
</bean>

跟继承一样,子类会包括父类的属性。当然,父类也可以加上abstract属性。这时,就不用填写class,作为抽象类使用。

依赖注入

依赖注入:将Bean依赖的类或普通值直接注入到Bean中,从而可以直接从Spring容器中通过访问Bean而直接访问它所依赖的部分,不用程序中再new新的实例,在一定程度上减少耦合。构造器注入参数注入是依赖注入的主要方式。

	<!--将List<String>类型,Map<String,User>,Properties类型注入UserDaoImpl--><bean id="userDao" class="com.littlepants.dao.impl.UserDaoImpl"><property name="stringList"><!--name属性名称--><list><value>aaa</value><!--value注入普通属性值--><value>bbb</value><value>ccc</value></list></property><property name="userMap"><map><entry key="user1" value-ref="user1"></entry><!--ref注入对象引用值--><entry key="user2" value-ref="user2"></entry></map></property><property name="properties"><props><prop key="p1">ppp1</prop><prop key="p2">ppp2</prop><prop key="p3">ppp3</prop></props></property></bean><bean id="user1" class="com.littlepants.domain.User"><!--构造器注入--><constructor-arg value=26><property name="name" value="Tom"/><property name="addr" value="Shanghai"/></bean><bean id="user2" class="com.littlepants.domain.User"><property name="name" value="Jerry"/><property name="addr" value="Beijing"/></bean>
//User
//通过set、get方法实现依赖注入
public class User {private int ageprivate String name;private String addr;public User(int age){this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", addr='" + addr + '\'' +'}';}
}

XML配置进阶

当需要配置大量Bean时,可以简写和多XML配置。
使用c、p命名空间可以分别对构造器注入和属性注入进行简写,在命名空间中加入相应的元素。

<!--xsi:schemaLocation不用加入,因为这还是属于Bean元素的定义-->
xmlns:c=""
xmlns:p=""
<!--构造器注入-->
<bean id="user" class="com.little.User" c:name="张三"/>
<!--属性注入-->
<bean id="user" class="com.little.User" p:age=26/>
<!--引入其他配置文件-->
<import resource="services.xml">

Bean的处理顺序

BeanFactoryPostProcessorBean的定义处理 构造器注入依赖对象 属性注入依赖 Aware相关接口和实现 BeanPostProcessor前置处理 是否继承InitializingBean接口 是否配置自定义的init-method BeanPostProcessor后置处理 Bean存活并使用 容器销毁 是否继承DisposableBean接口 是否配置destroy-method

[参考文献]陈学明.Spring+Spring MVC+MyBatis整合开发实战[M].北京:机械工业出版社,2020:46-72.

更多推荐

Spring学习总结(一)

本文发布于:2024-03-23 20:26:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1742461.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Spring

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!