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 +
'}';
}
}