一、spring入门
0. new project
1.Add Spring Capabilities,(初学中间配置不清楚的话,全部选择默认)
2.MyClass.java
package
com.lipeng.myinterface;
public
interface
MyClass {
public
void
execute();
}
3.MyClassImpl.java
package
com.lipeng.myimpl;
import
com.lipeng.myinterface.MyClass;
public
class
MyClassImpl
implements
MyClass {
public
void
execute() {
System.
out
.println(
"test spring successful"
);
}
}
4.applicationContext.xml
<
beans
>
<
bean
id
=
"myClass"
class
=
"com.lipeng.myimpl.MyClassImpl"
/>
</
beans
>
5.test.java
public
class
Test {
public
static
void
main(String[] args) {
ApplicationContext ac =
new
FileSystemXmlApplicationContext(
"…//applicationContext.xml"
); //载入Spring配置文档
MyClass myclass = (MyClass)ac.getBean(
"myClass"
);
//实例化配置的对象,以配置文件的bean节点ID值作为实例引用的关键字。
myclass.execute();
}
}
运行
test.java
如果提示
log4j error....
这是因为springFramework使用的log4j,而我们没有添加log4j的配置文件导致。
6.Log4j配置文件log4j.properties
log4j.rootLogger =
INFO,f
#
log4j.appender.f =
org.apache.log4j.RollingFileAppender
log4j.appender.f.File =
D
:
//workspace//test//logs//test.log
log4j.appender.f.MaxFileSize =
512KB
log4j.appender.f.MaxBackupIndex =
3
log4j.appender.f.layout =
org.apache.log4j.PatternLayout
再次运行
test.java
,输出“
test spring successful
”,表明
MyClass
的
myclass
对象
执行了
MyClassImpl.java
的
execute()
。
这就是
Spring
?就是一个
getBean
(),不过,已经尝试完了。
二. 搭建spring的Web应用环境
1、下载springFramework最新版本
http://www.springframework.org,将springFramework下的*.jar 拷贝到项目lib中,并引用。
2、在Web.xml中配置spring的启动方式。
springFramework提供两种形式的web context,基于Listener接口的实现和基于Servlet接口的实现。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<display-name>Test</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring_bean.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
-->
<servlet>
<servlet-name>Init</servlet-name>
<servlet-class>com.m5.Initializtion</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
</web-app>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<display-name>Test</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring_bean.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
-->
<servlet>
<servlet-name>Init</servlet-name>
<servlet-class>com.m5.Initializtion</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
</web-app>
tomcat 启动时会装载/WEB-INF/spring_bean.xml文件,如果不指定contextConfigLocation参数, 默认装载/WEB-INF/applicationContext.xml文件。然后在tomcat启动时初始化一个自定义servlet, 在这里实现springFramework的装载。
Initializtion.java
public class Initializtion extends HttpServlet
{
public void init(ServletConfig config) throws ServletException
{
{
public void init(ServletConfig config) throws ServletException
{
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext
(config.getServletContext());
super.init(config);
InitSpring.Init((AbstractApplicationContext)wac); (1)
}
}
(config.getServletContext());
super.init(config);
InitSpring.Init((AbstractApplicationContext)wac); (1)
}
}
InitSpring.java
public class InitSpring {
AbstractApplicationContext wac = null;
private static InitSpring instance = new InitSpring();
private InitSpring(){}
public static void Init(AbstractApplicationContext wac){
instance.wac = wac;
}
public static Object getInstance(String objName) {
return instance.wac.getBean(objName);
}
public static Object getInstance(Class objClass){
return getInstance(objClass.getName());
}
}
AbstractApplicationContext wac = null;
private static InitSpring instance = new InitSpring();
private InitSpring(){}
public static void Init(AbstractApplicationContext wac){
instance.wac = wac;
}
public static Object getInstance(String objName) {
return instance.wac.getBean(objName);
}
public static Object getInstance(Class objClass){
return getInstance(objClass.getName());
}
}
经过以上处理,在项目任何一个类中如需得到Spring配置文件中的一个类实例,如下即可: InitSpring.getObject(beanId);
附:
当然了,如果是spring+struts也可以用:
需要注意的是:servlet是org.apache.struts.action.Acation的一个实例变量,所以如下方法只能在继承了Action类的类中使用,一般为了方便,我们为工程所有的action建一个公共父类去管理它BaseDispatchAction 。
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.apache.struts.action.Action.servlet
public class BaseDispatchAction extends Action {
...............
/**
*
Convenience
method
to
get
Spring
-
initialized
beans
*
*
@param
name
*/
public
Object getBean(String name) {
ApplicationContext ctx = WebApplicationContextUtils
.getRequiredWebApplicationContext(
servlet
.getServletContext());
return
ctx.getBean(name);
}
......
}