Spring学习心得(11)-- spring配置文件的继承和抽象属性
2017-03-14 14:42
435 查看
抽象属性:
应用场景:如果我们把一个类加到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>
然后我们再次运行测试类:
以上
相关文章推荐
- 关于spring配置文件的继承和抽象属性
- [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件
- spring学习(四)—属性注入的四种方法(通过配置文件)
- 学习Spring(二) -- Spring配置文件基本属性详解
- spring学习总结(六):IOC & DI 配置Bean之作用域、加载外部属性文件、SPEL
- Spring学习-11:配置文件引入的问题(配置文件过于庞大,不便于修改的处理方法)
- Spring入门学习——配置文件<beans>属性配置记录
- SpringBoot内部配置:“application.properties配置”和”使用XML配置”,读取属性文件中的内容,日志配置,Profile配置(学习:SpringBoot实战)
- Spring4深入理解IOC&DI02----Bean配置--自动装配、bean之间的继承与依赖、使用外部属性文件
- spring配置文件中scope属性
- spring配置文件中 关于继承类的配置
- Spring学习笔记 通过PropertyPlaceholderConfigurer来使用properties文件初始化Map类型属性
- Spring-配置文件Bean定义中parent属性详解
- [WCF 学习笔记] 11. 配置文件
- Spring 配置文件 属性 参数
- spring配置文件各个属性详解
- python 学习记录(11)-文件处理/读取文件/文件写入内容/文件删除/文件复制/文件重命名/后缀名/内容查找与替换/文件比较/ 配置文件访问/目录创建与删除/遍历目录/定向输出
- 学习ORACLE中关于配置文件的读取和修改心得以及问题
- spring配置文件中的context:property-placeholder属性
- Java中如何获取spring中配置的properties属性文件内容