Spring Bean的基础知识总结

1.bean属性

属性描述
class这个属性是强制性的,并且指定用来创建 bean 的 bean 类。
name这个属性指定唯一的 bean 标识符。在基于 XML 的配置元数据中,你可以使用 ID 和/或 name 属性来指定 bean 标识符。
scope这个属性指定由特定的 bean 定义创建的对象的作用域,它将会在 bean 作用域的章节中进行讨论。
constructor-arg它是用来注入依赖关系的,并会在接下来的章节中进行讨论。
properties它是用来注入依赖关系的,并会在接下来的章节中进行讨论。
autowiring mode它是用来注入依赖关系的,并会在接下来的章节中进行讨论。
lazy-initialization mode延迟初始化的 bean 告诉 IoC 容器在它第一次被请求时,而不是在启动时去创建一个 bean 实例。
initialization 方法在 bean 的所有必需的属性被容器设置之后,调用回调方法。它将会在 bean 的生命周期章节中进行讨论。
destruction 方法当包含该 bean 的容器被销毁时,使用回调方法。它将会在 bean 的生命周期章节中进行讨论。

如果用xml配置

<bean class="com.itcast.spring.Bean2" id="bean2" ></bean>

 2.bean的作用域

作用域描述
singleton

在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,默认值

prototype每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()
request每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境
session同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境
global-session一般用于Portlet应用环境,该运用域仅适用于WebApplicationContext环境

在配置bean时加上scope属性即可

<bean class="com.itcast.spring.Bean2" id="bean2" scope="singleton"></bean>

 3.bean的生命周期

<bean class="com.itcast.spring.Bean2" id="bean2" scope="singleton" init-method="int" destroy-method="destory">

然后再bean中定义void 方法init(), destory()方法,spring在创建和销毁bean对象的时候回调用。

bean.xml文件放在resource目录下面。

 4.bean的后置处理器

5.通过注解注入bean,替代xml配置文件

5.1首先要创建注解配置类MyConfiguration

package com.itcast.zhujie;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration  //标识这个类是注解配置类
@ComponentScan("com.itcast.zhujie")  //扫描这个包下面的所有的包含@Component注解的类
public class MyConfiguration {

}

5.2创建bean时要加上注解@Component

package com.itcast.zhujie;

import org.springframework.stereotype.Component;

@Component
public class Bean1 {

}

5.3 从SpringIOC获取bean对象

package com.itcast.zhujie;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import static org.junit.Assert.*;

public class Bean1Test {
    @Test
    public void test(){
        //从ioc中获取bean对象
        ApplicationContext context = new AnnotationConfigApplicationContext(MyConfiguration.class);
        Bean1 bean1 = context.getBean("bean1",Bean1.class);
        System.out.println(bean1);
    }
}

 5.4.通过注解注入属性,只要在bean类中加上注解即可

package com.itcast.zhujie;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;

@Component
public class Bean1 {
    @Value("张三") //基本类型属性注入@Value
    private String username;
    @Value("44")
    private int age;

    @Autowired //@Autowire按照类型(父类)匹配bean还有一个属性required,默认值为true,表示当匹配失败后,会终止程序运行。若将其值设置为false,则匹配失败,将被忽略,未匹配的属性值为null。
    private Bean2 bean2;

    @Autowired
    @Qualifier("bean2") //传beanid标识进一步确定哪个实现类才是
    private Bean2 bean3;

    @Resource(name = "bean3") //@Resource注解既可以按名称匹配Bean,也可以按类型匹配Bean。使用该注解,要求JDK必须是6及以上版本。
    private Bean3 bean4;

    @PostConstruct //与原来的init-method等效。
    public void init(){
        System.out.println("bean init");
    }

    @PreDestroy //在方法上使用@PreDestroy,与destroy-method等效。
    public void destory(){
        System.out.println("bean destory");
    }

    @Override
    public String toString() {
        return "Bean1{" +
                "username='" + username + '\'' +
                ", age=" + age +
                ", bean2=" + bean2 +
                ", bean3=" + bean3 +
                ", bean4=" + bean4 +
                '}';
    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

runtoweb3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值