在java开发中,我们会使用到各种各样的框架,使用这些框架能够帮助开发人员快速开发项目,简化开发工作,比如spring框架,那spring框架是做什么的?接下来我们就来给大家讲解一下这方面的内容。
Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发。应用程序是由一组相互协作的对象组成。
Spring有以下几点作用:
(1)Spring能帮我们根据配置文件创建及组装对象之间的依赖关系。
(2)Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
(3)在传统应用程序当中,我们如何来完成数据库事务管理?需要一系列“获取连接,执行SQL,提交或回滚事务,关闭连接”,而且还要保证在最后一定要关闭连接,多么可怕的事情,而且也很无聊;如果采用Spring,我们只需获取连接,执行SQL,其他的都交给Spring来管理了,简单吧。所以,Spring能非常简单的帮我们管理数据库事务。
(4)Spring还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板,来方便数据库访问。
(5)Spring还提供与第三方Web(如Struts、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。
(6)Spring能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)
Spring Bean如何继承?
在 Spring XML 配置中,我们通过子 Bean 的 parent 属性来指定需要继承的父 Bean,配置格式如下。
<!--父Bean--> <bean id="parentBean" class="xxx.xxxx.xxx.ParentBean" > <property name="xxx" value="xxx"></property> <property name="xxx" value="xxx"></property> </bean> < !--子Bean-- > <bean id="childBean" class="xxx.xxx.xxx.ChildBean" parent="parentBean"></bean>
下面我们就通过一个实例,演示 Spring Bean 的继承。
package net.biancheng.c; public class Animal { private String name; private Integer age; public void setName(String name) { System.out.println("Animal setName:" + name); this.name = name; } public void setAge(Integer age) { System.out.println("Animal setAge:" + age); this.age = age; } @Override public String toString() { return "Animal{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
3. 在 net.biancheng.c 包下,创建一个名为 Dog 的类,代码如下。
package net.biancheng.c; public class Dog { private String name; private Integer age; private String call; public void setCall(String call) { System.out.println("Dog setCall:" + call); this.call = call; } public void setName(String name) { System.out.println("Dog setName:" + name); this.name = name; } public void setAge(Integer age) { System.out.println("Dog setAge:" + age); this.age = age; } @Override public String toString() { return "Dog{" + "name='" + name + '\'' + ", age=" + age + ", call='" + call + '\'' + '}'; } }
4. 在 src 目录下,创建 Spring 配置文件 Beans.xml,配置内容如下。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="animal" class="net.biancheng.c.Animal"> <property name="name" value="动物"></property> <property name="age" value="10"></property> </bean> <bean id="dog" class="net.biancheng.c.Dog" parent="animal"> <property name="name" value="小狗"></property> <property name="call" value="汪汪汪……"></property> </bean> </beans>
5. 在 net.biancheng.c 包下,创建一个名为 MainApp 的类,代码如下。
package net.biancheng.c; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { //获取 ClassPathXmlApplicationContext 容器 ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); Dog dog = context.getBean("dog", Dog.class); System.out.println(dog); } }
6. 执行 MainApp 中的 main 方法,控制台输出如下。
Animal setName: 动物 Animal setAge: 10 Dog setName: 小狗 Dog setAge: 10 Dog setCall: 汪汪汪…… Dog { name = '小狗', age = 10, call = '汪汪汪……' }
Bean 定义模板
在父 Bean 的定义中,有一个十分重要的属性,那就是 abstract 属性。如果一个父 Bean 的 abstract 属性值为 true,则表明这个 Bean 是抽象的。
抽象的父 Bean 只能作为模板被子 Bean 继承,它不能实例化,也不能被其他 Bean 引用,更不能在代码中根据 id 调用 getBean() 方法获取,否则就会返回错误。
在父 Bean 的定义中,既可以指定 class 属性,也可以不指定 class 属性。如果父 Bean 定义没有明确地指定 class 属性,那么这个父 Bean 的 abstract 属性就必须为 true。
示例 :
下面我们通过一个实例,演示下 Bean 定义模板的使用。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="animal" abstract="true"> <property name="name" value="动物"></property> <property name="age" value="10"></property> </bean> <bean id="dog" class="net.biancheng.c.Dog" parent="animal"> <property name="name" value="小狗"></property> <property name="call" value="汪汪汪……"></property> </bean> </beans>
2. 重新执行 MainApp 中的 main 方法,控制台输出如下。
Dog setName:小狗 Dog setAge:10 Dog setCall:汪汪汪…… Dog{name='小狗', age=10, call='汪汪汪……'}
通过控制台输出可以看出,在 Spring 启动时,并没有实例化 animal。
Spring Bean 的定义中可以包含很多配置信息,子 Bean 既可以继承父 Bean 的配置数据,也可以根据需要重写或添加属于自己的配置信息。最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。
推荐阅读: