Spring学习心得(11)-- spring配置文件的继承和抽象属性

来源:互联网 发布:孙真人知柏地黄丸好吗 编辑:程序博客网 时间:2024/06/09 21:13

抽象属性:

应用场景:如果我们把一个类加到spring容器中,但是又不想spring容器为它创建对象的话,那么使用bean中的abstract对象。比如说一些公共的类。就算创建了对象也没有用,由子类来继承 

比如说:

/这是一个通用类,只是有这些方法,创建这个类的对象没有什么用//让有实际应用场合的类来继承这个类public class commonObject {    public void add(){        System.out.println("add");    }    public void delete(){        System.out.println("delete");    }    public void update(){        System.out.println("udpate");    }    public void query(){        System.out.println("query");    }}//这时候,一个学生类继承了这个类,虽然这里是空的,可是它拥有的父类的的Crud方法public class StudentDAO extends commonObject{}//配置文件:    <bean id="commonObject" class="cn.ansel.extend.commonObject"></bean>    <bean id="studentDAO" class="cn.ansel.extend.StudentDAO"></bean>//测试类public class extendTest {    /**     * 首先我们先看看能不能得到通用类     */    @Test    public void testExtend(){        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("cn/ansel/extend/applicationContext-extend.xml");        commonObject commonObject=(commonObject) applicationContext.getBean("commonObject");        commonObject.add();    }}

运行结果毫无意外的成功了 
这里写图片描述 
那么要怎样设置成,让spring容器不创建这个对象呢?

在配置文件的bean中有一个属性:abstract。只要你想要哪个类不创建对象的话,将该bean的abstract设置成true即可.

//在这里我们就把通用类的abstract设置成true<bean id="commonObject" class="cn.ansel.extend.commonObject" abstract="true"></bean>

然后再运行测试类(测试类的代码没有做任何修改): 
这里写图片描述
可以看到,运行的时候报错了,原因就是和这个bean设置成了抽象类。

继承:

应用场景:我们继续那我们上面的两个例子来说,比如说我们已经在myEcplisr里面设置了studentDao继承了commonObject类,但是commonObject类里面还有一个属性,下面是修改后的commonObject的代码:

public class commonObject {    //新属性    private String s;    public void add(){        System.out.println("add");    }    public void delete(){        System.out.println("delete");    }    public void update(){        System.out.println("udpate");    }    public void query(){        System.out.println("query");    }}//studentDAO类:public class StudentDAO extends commonObject{    public void show(){        //输出字符串s        System.out.println("s="+s);    }}配置文件:    <bean id="commonObject" class="cn.ansel.extend.commonObject" abstract="true">        <!--             给属性s通过setter的方法赋值         -->        <property name="s" value="you can't see me"></property>    </bean>    <bean id="studentDAO" class="cn.ansel.extend.StudentDAO"></bean></beans>测试类:public class extendTest {    @Test    public void testExtend(){        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("cn/ansel/extend/applicationContext-extend.xml");        StudentDAO dao=(StudentDAO) applicationContext.getBean("studentDAO");        //输出父类属性的值        dao.show();    }}

运行结果: 
这里写图片描述

我们可以看到,虽然我们在代码中写了继承commonObject类,并且在配置文件中给s这个属性赋了值,可是它依旧为null。那么要想解决这种情况,我们必须要在这个子类对应的配置文件中Bean的parent属性设置成妖继承的类,才能使用父类的属性。 
修改过后的配置文件:

 <bean id="commonObject" class="cn.ansel.extend.commonObject" abstract="true">        <!--             给属性s通过setter的方法赋值         -->        <property name="s" value="you can't see me"></property>    </bean>    <!--         只是spring容器,parent中的类为该类的父类     -->    <bean id="studentDAO" class="cn.ansel.extend.StudentDAO" parent="commonObject"></bean>

然后我们再次运行测试类: 
这里写图片描述

以上




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 面试问特长没有怎么办 组织一个演讲 你怎么办 跑步把腿跑粗了怎么办 跑步跑出肌肉腿怎么办 班级聚会人不齐怎么办 如果我们分手了怎么办 幼儿园课上完了怎么办 第一次上台唱歌紧张怎么办 第一次当主持人紧张怎么办 主持的时候口吃怎么办 打官司公司改规章制度怎么办 怎么办生日派对比较好 考不过科目一怎么办 卫校毕业证丢了怎么办 不小心摔跤了怎么办 篮球打气口漏气怎么办 手机麦有回音怎么办 obs直播有杂音怎么办 耳机会有回音怎么办 眼睛看东西散光怎么办 一只眼睛红肿怎么办 幼儿精力不集中怎么办 孕妇照四维说头大怎么办 孕晚期贫血严重怎么办 孕期肚子胀气难受怎么办 结婚三月没怀孕怎么办 在小龙武校病了怎么办 地下厨房太闷热怎么办 菜刀刀背磨手怎么办 养热水鱼冬天怎么办 冬天没热水洗澡怎么办 饭店厨房太热怎么办 餐厅厨房太热怎么办 有人在超市大便怎么办 家里有神经病人怎么办 家有神经病人怎么办 拍拍贷恶意催收怎么办? 拍拍贷爆通讯录怎么办 拍拍贷还款不了怎么办 信用卡欠款收到律师函怎么办 练瑜伽拉伤肌肉怎么办