spring bean的简介以及手动装配、自动装配、注解装配且包含实际demo

2023-12-28 18:04:53

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的作用域

  1. singleton单例模式(默认)
  • Spring默认的scope
  • 表示Spring容器只创建一个bean的实例
  • Spring在创建第一次后会缓存起来,之后不再创建
  • 对应设计模式中的单例模式
  • <bean id="user" class="com.pojo.User" c:name="kun" c:age="19" scope="singleton"></bean>
  1. prototype原型模式
  • 线程每次调用这个bean都新创建一个实例
  • user.hashCode() 实例标识码
  • <bean id="user" class="com.pojo.User" c:name="kun" c:age="19" scope="prototype"></bean>
  1. 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 

文章来源:https://blog.csdn.net/qubes/article/details/135271128
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。