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的处理顺序
[参考文献]陈学明.Spring+Spring MVC+MyBatis整合开发实战[M].北京:机械工业出版社,2020:46-72.
更多推荐
Spring学习总结(一)
发布评论