目录
该篇随笔,主要用于记录spring framework 基础知识。由于笔者是初学者,见识与能力有限,难免出现错误,如果发现错误,望不吝赐教。
以下列出了使用spring framework的一些巨大好处
spring使开发人员能够使用pojo开发企业级应用程序。仅使用pojo的好处是您不需要ejb容器产品(如应用程序服务器),但您可以选择仅使用强大的servlet容器(如tomcat)或某些商业产品。
spring采用模块化方式组织。即使包和类的数量很大,你也只需要担心你需要的那些而忽略其余的。
spring并没有重新发明轮子,而是真正利用了一些现有技术,如几个orm框架,日志框架,jee,quartz和jdk计时器以及其他视图技术。
测试用spring编写的应用程序很简单,因为依赖于环境的代码被移动到这个框架中。此外,通过使用javabeanstyle pojo,使用依赖注入来注入测试数据变得更加容易。
spring的web框架是一个设计良好的web mvc框架,它提供了一个很好的替代web框架,如struts或其他过度设计或不太流行的web框架。
spring提供了一个方便的api,用于将特定于技术的异常(例如,jdbc,hibernate或jdo抛出)转换为一致的,未经检查的异常。
轻量级ioc容器往往是轻量级的,尤其是与ejb容器相比时。这有利于在具有有限内存和cpu资源的计算机上开发和部署应用程序。
spring提供了一致的事务管理接口,可以缩小到本地事务(例如,使用单个数据库)并扩展到全局事务(例如,使用jta)。
spel模块提供了一种强大的表达式语言,用于在运行时查询和操作对象图。
1.使用idea创建spring项目
2.创建helloworld文件
package top.ninwoo.learn; public class helloworld { private string message; public void getmessage() { system.out.println("your message " + message); } public void setmessage(string message) { this.message = message; } }
3.创建main函数
public class mainapp { public static void main(string[] args) { applicationcontext context = new classpathxmlapplicationcontext("beans.xml"); helloworld obj = (helloworld) context.getbean("helloworld"); obj.getmessage(); } }
使用classpathxmlapplicationcontext读取bean配置文件
4.配置文件
<?xml version="1.0" encoding="utf-8"?> <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.xsd"> <bean id="helloworld" class="top.ninwoo.learn.helloworld"> <property name="message" value="hello world!"/> </bean> </beans>
property 传入了helloworld的参数
spring ioc容器利用java pojo类和配置元数据来生成完全配置和可执行的系统或应用程序,配置元数据可以由:
容器类型:
applicationcontext包含全部的beanfactory,beanfactory在小型化设备上仍可以用。
构成应用程序主干并由spring ioc容器管理的对象称为bean.
bean的定义:
参数:
方法:
<?xml version = "1.0" encoding = "utf-8"?> <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"> <!-- a simple bean definition --> <bean id = "..." class = "..."> <!-- collaborators and configuration for this bean go here --> </bean> <!-- a bean definition with lazy init set on --> <bean id = "..." class = "..." lazy-init = "true"> <!-- collaborators and configuration for this bean go here --> </bean> <!-- a bean definition with initialization method --> <bean id = "..." class = "..." init-method = "..."> <!-- collaborators and configuration for this bean go here --> </bean> <!-- a bean definition with destruction method --> <bean id = "..." class = "..." destroy-method = "..."> <!-- collaborators and configuration for this bean go here --> </bean> <!-- more bean definitions go here --> </beans>
当定义一个
spring framework 支持以下5种作用域,如果使用的是web-aware application只有三种可用。
只创建该bean定义的对象的一个实例。
<!-- a bean definition with singleton scope --> <bean id = "..." class = "..." scope = "singleton"> <!-- collaborators and configuration for this bean go here --> </bean>
配置完成之后,如下的代码,有以下的效果。
applicationcontext context = new classpathxmlapplicationcontext("beans.xml"); helloworld obja = (helloworld) context.getbean("helloworld"); obja.setmessage("i'm object a"); obja.getmessage(); helloworld objb = (helloworld) context.getbean("helloworld"); objb.getmessage();
该程序打印:
i'm object a i'm object a
这证明,实际只创建了一个bean对象,虽然调用了两次getbean,但返回的都是同一个对象。
每次调用bean,都会创建一个新的方法。
将上述的bean设置为prototype,执行同样的代码将会出现不同的效果。
该程序打印:
i'm object a null
主要指的是,当bean被实例化时,可能需要执行一些初始化以使其进入可用状态。类似地,当不再需要bean并从容器中移除bean时,可能需要进行一些清理。
中间也存在一些活动,本章重点讨论以下两个声明周期回调方法。
org.springframework.beans.factory.initializingbean已经为我们提供了开发接口。
void afterpropertiesset() throws exception;
这样我们就可以通过实现上面的接口实现初始化工作
public class examplebean implements initializingbean { public void afterpropertiesset() { // do some initialization work } }
另外,对于xml的配置元数据,可以通过init-method指定具有void无参数的方法
<bean id = "examplebean" class = "examples.examplebean" init-method = "init"/>
org.springframework.beans.factory.disposablebean也已经提供好了接口
void destroy() throws exception;
这样,我们可以通过实现该接口实现销毁的工作
public class examplebean implements disposablebean { public void destroy() { // do some destruction work } }
注意:如果想要使该函数起作用,需要注册registershutdownhook()方法。
同样,基于xml配置元数据,可以使用destroy-method指定具有void的无参方法
<bean id = "examplebean" class = "examples.examplebean" destroy-method = "destroy"/>
建议还是使用xml的方式,更加灵活。
如果很多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" default-init-method = "init" default-destroy-method = "destroy"> <bean id = "..." class = "..."> <!-- collaborators and configuration for this bean go here --> </bean> </beans>
如对本文有疑问, 点击进行留言回复!!
详解SpringBoot修改启动端口server.port的四种方式
网友评论