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
- Spring学习心得(11)-- spring配置文件的继承和抽象属性
- 关于spring配置文件的继承和抽象属性
- Spring 配置文件的属性介绍
- Spring 配置文件 属性 ref bean和local的区别
- Spring 配置文件中Bean 属性id和name的区别
- spring中属性文件和配置文件的注入方式
- Spring配置文件和各个属性分析
- Spring 配置文件 属性 参数
- spring 配置文件属性
- spring 配置文件属性
- Spring Boot属性配置文件
- spring boot 配置文件属性
- Spring学习心得(9)-- IOC和DI的意义
- Spring依赖注入(基于XML配置文件和Annotation的方式完成属性装配)
- spring mvc注入配置文件里的属性
- spring mvc注入配置文件里的属性
- spring mvc注入配置文件里的属性
- spring 抽象bean及继承
- 新型的按键扫描程序,仅三行程序
- 获取指定父元素下指定类名的元素集合
- floodligth rest开发
- 成员函数指针与高性能的C++委托(中篇)
- 百度图片搜索部门面试
- Spring学习心得(11)-- spring配置文件的继承和抽象属性
- 斯特林数 HDU 3625
- DOS命令之常用命令
- 苹果账号打包发布APP流程详解
- SQL——try catch 定义解析 处理sql错误处理
- 【第十三课】线程---两种开启线程的方式
- 数据查询使用数字代替字段排序
- mysql修改存储路径
- 成员函数指针与高性能的C++委托(下篇)