继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Spring IOC/DI学习小结Ⅱ

亚努人
关注TA
已关注
手记 20
粉丝 36
获赞 349
1、Bean的生命周期
1、通过构造器或工厂方法创建Bean实例;
2、为Bean的属性赋值或者引用其他Bean;
3、调用Bean的初始化方法;
4、使用Bean;
5、当IOC容器关闭时,调用Bean的销毁方法。

在Spring XML文件的bean标签中,可以通过init-method和destroy-method属性指定初始化和销毁方法。还可以配置bean的后置处理器,在初始化方法执行前后执行。具体的代码如下所示。

public class Student {
    private String sname;
    private int sno;
    private Map<String,Course> course;

    public Student() {
        System.out.println("这是构造方法");
    }

    public void fun1(){
        System.out.println("这是初始化方法");
    }

    public void fun2(){
        System.out.println("这是销毁方法");
    }
}
public class MyBeanPostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("after:"+bean+"  "+beanName);
        return bean;
    }

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("before:"+bean+"  "+beanName);
        return bean;
    }

}
    <bean id="student1" class="com.spring.beans.test.Student" init-method="fun1" destroy-method="fun2"></bean>
    <!-- 配置bean的后置处理器  实现BeanPostProcess接口 -->
    <bean class="com.spring.beans.test.MyBeanPostProcessor"></bean>

最后使用main方法对student1这个bean对象进行实例化和输出,其中main方法中使用ctx.close()将IOC容器关闭,结果如下图所示。
图片描述

2、Bean使用外部属性文件

Spring常要用来整合其他框架,如持久层框架。以数据库数据源为例,首先在项目中新建db.properties文件,存放数据连接信息,然后进行属性配置。代码如下。

    <!-- 导入属性文件 -->
    <context:property-placeholder location="classpath:db.properties" />

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 使用外部属性文件的属性 -->
        <property name="user" value="${user}"></property>
        <property name="password" value="${password}"></property>
        <property name="jdbcUrl" value="${jdbcUrl}"></property>
        <property name="driverClass" value="${driverClass}"></property>
    </bean>
3、Bean自动装配

在bean标签里的autowire属性里指定自动装配的模式,byName根据名字进行自动装配,若没有则不装配,也可以使用byType根据类型装配,但如果有一个以上的相同类型会抛出异常。

<bean id="student2" class="com.spring.beans.test.Student"   p:sname="李四" autowire="byName"></bean>

上述代码里面使用了p命名空间,可以简化原来标签里name和value属性的写法。基于注解的方式在属性前加上@Autowire注解也可进行自动装配。

4、Bean的继承

在bean标签中使用parent属性指定父bean,子bean也可以覆盖父bean的配置。代码如下所示。

    <bean id="student2" class="com.spring.beans.test.Student" 
    p:sname="李四" autowire="byName"></bean>
    <bean id="student3" p:sname="王五" parent="student2"></bean>
5、Bean的作用域

默认的作用域是singleton,容器初始化时创建bean实例,整个容器的生命周期内只创建这一个bean。还有一个常用的是prototype,容器初始化时不创建bean实例,而在每次请求时都创建一个新的bean实例。

6、SPEL表达式

类似于JSP页面中的EL表达式,使用#{}作为定界符,可以在value属性中引用字面常量(加单引号)或者其他的bean(不加引号)。也可以进行运算等操作。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP