bean
- JavaBeans 是 Java 中特殊的类,可以将多个对象封装到一个bean对象中
- 特点是可序列化: 提供无参构造器,提供 getter 和 setter 方法访问对象的属性。
- 被Spring管理的对象统称为Bean,一个bean对应一个实例对象
基本配置
<!--
id:bean唯一标识符,相当于变量名
class:bean对象所对应的类,包名+类
name:别名,与alias类似,可取多个,用空格/逗号/分号进行分隔
property: 实例内部属性 -->
<bean id="usert" class="com.hou.pojo.UsetT" name="u1,u2" >
<property name="name" value="kun"/>
</bean>
alias 别名
<!-- user和user2具有相同效果 -->
<bean id="user" class="com.hou.pojo.User">
<constructor-arg name="name" value="hou"></constructor-arg>
</bean>
<alias name="user" alias="user2"/>
合并bean文件
<!-- 用于团队开发,import可以将多个bean文件,导入合并为一个总配置
调用时,直接使用总配置文件即可 如 applicationContext.xml -->
<beans >
<!-- 引入其他bean xml配置文件 -->
<import resource="beans1.xml"/>
<import resource="beans2.xml"/>
<import resource="beans3.xml"/>
</beans>
bean的作用域
- singleton单例模式(默认)
- Spring默认的scope
- 表示Spring容器只创建一个bean的实例
- Spring在创建第一次后会缓存起来,之后不再创建
- 对应设计模式中的单例模式
<bean id="user" class="com.pojo.User" c:name="kun" c:age="19" scope="singleton"></bean>
- prototype原型模式
- 线程每次调用这个bean都新创建一个实例
user.hashCode()
实例标识码<bean id="user" class="com.pojo.User" c:name="kun" c:age="19" scope="prototype"></bean>
- web 其余的scope只能在web开发中使用
- Request: 表示每个request作用域内的请求只创建一个实例。
- Session: 表示每个session作用域内的请求只创建一个实例。
- GlobalSession: 这个只在porlet的web应用程序中才有意义,它映射到porlet的global范围的session。如果普通的web应用使用了这个scope,容器会把它作为普通的session作用域的scope创建。
demo: 手动装配+xml
步骤
- 定义类: java
- 定义bean: xml, 关联类,通过property注入数据,通过ref配置bean和bean之间的关联关系
- 调用bean: java
// 启动: 打开工程 =》idea . => 右键MyTest4.java启动 =》 run
// .
// ├── main
// │ ├── java
// │ │ └── com
// │ │ └── ah
// │ │ └── paul
// │ │ ├── Dog.java
// │ │ └── Person.java
// │ └── resources
// │ └── beans.xml
// └── test
// └── java
// └── MyTest4.java
// 1.1 定义类: Dog
// src/main/java/com/ah/paul/Dog.java
package com.ah.paul;
public class Dog {
public void action(){
System.out.println("wang~");
}
}
// 1.2 定义类: Person
// src/main/java/com/ah/paul/Person.java
package com.ah.paul;
public class Person {
// 构造函数
public Person() {
}
// name: 属性和他的set/get方法
private String name;
public String getName() {
return name;}
public void setName(String name) {
this.name = name;}
// dog: 属性和他的set/get方法
private Dog dog;
public Dog getDog() {
return dog;}
public void setDog(Dog dog) {
this.dog = dog;}
}
// 2 定义bean
// src/main/resources/beans.xml
// <!-- 手动配置bean: Person通过ref关键字关联 dog 对象-->
<bean id="dog" class="com.ah.paul.Dog"/>
<bean id="person" class="com.ah.paul.Person">
<property name="name" value="paul"/>
<property name="dog" ref="dog"/>
</bean>
// 3. 测试: 调用bean
// src/test/java/MyTest4.java
import com.ah.paul.Person;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest4{
public static void main(String[] args) {
ApplicationContext context