GVKun编程网logo

在 WEB 应用中使用 Spring(框架)(如何在web应用中配置spring)

10

想了解在WEB应用中使用Spring(框架)的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于如何在web应用中配置spring的相关问题,此外,我们还将为您介绍关于cloudfoundry的

想了解在 WEB 应用中使用 Spring(框架)的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于如何在web应用中配置spring的相关问题,此外,我们还将为您介绍关于cloudfoundry的应用类型里 java_web 和 spring 有什么区别? java_web不允许使用spring吗? spring必须要使用spring吗?、java – 在Spring mvc框架中使用Spring加载、java – 无法找到Spring NameSpaceHandler – Spring的mvc-basic在equinox中使用MANIFEST.MF类似于web-console Spring DM示例webapp、JavaWeb_(Spring 框架) SpringAOP 面向切面编程的新知识。

本文目录一览:

在 WEB 应用中使用 Spring(框架)(如何在web应用中配置spring)

在 WEB 应用中使用 Spring(框架)(如何在web应用中配置spring)

一、在web环境下使用Spring步骤

关键几点说明

1、需要额外加入jar包

spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar

2、Spring的配置文件,没有什么不同
3、需要在web.xml中加入如下配置

<!-- 配置Spring配置文件的名称和位置 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <!-- 启动IOC容器的ServletContextListener -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener> 

注:

        1、contextConfigLocation名称不可更改,否则将报错;

        2、若不想配置Spring配置文件的名称和位置,则框架将使用默认配置,即先将

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
</context-param>

注释掉,然后将applicationContext.xml(不可更名)配置文件移至/WEB-INF下。

二、代码说明

1、jsp测试

<%@page import="org.springframework.web.context.WebApplicationContext"%>
<%@page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
<%@page import="org.springframework.context.ApplicationContext"%>
<%@page import="com.lty.spring.struts2.bean.Person"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		//1、从application域对象中获取IOC容器的实例
		WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(application);
		
		//2、从IOC容器中获取bean
		Person person = ctx.getBean(Person.class);
		
		//3、使用bean
		person.hello();
		
	%>
</body>
</html>

三、源码说明

      主要包括ServletContextListener的初始化方法实例化IOC容器以及将该容器对象放入application域对象的一个属性中。主类:ContextLoaderListener

public WebApplicationContext initWebApplicationContext(ServletContext servletContext) {
		if (servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) != null) {
			throw new IllegalStateException(
					"Cannot initialize context because there is already a root application context present - " +
					"check whether you have multiple ContextLoader* definitions in your web.xml!");
		}

		Log logger = LogFactory.getLog(ContextLoader.class);
		servletContext.log("Initializing Spring root WebApplicationContext");
		if (logger.isInfoEnabled()) {
			logger.info("Root WebApplicationContext: initialization started");
		}
		long startTime = System.currentTimeMillis();

		try {
			// Store context in local instance variable, to guarantee that
			// it is available on ServletContext shutdown.
			if (this.context == null) {
				this.context = createWebApplicationContext(servletContext);
			}
			if (this.context instanceof ConfigurableWebApplicationContext) {
				ConfigurableWebApplicationContext cwac = (ConfigurableWebApplicationContext) this.context;
				if (!cwac.isActive()) {
					// The context has not yet been refreshed -> provide services such as
					// setting the parent context, setting the application context id, etc
					if (cwac.getParent() == null) {
						// The context instance was injected without an explicit parent ->
						// determine parent for root web application context, if any.
						ApplicationContext parent = loadParentContext(servletContext);
						cwac.setParent(parent);
					}
					configureAndRefreshWebApplicationContext(cwac, servletContext);
				}
			}
			servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);

			ClassLoader ccl = Thread.currentThread().getContextClassLoader();
			if (ccl == ContextLoader.class.getClassLoader()) {
				currentContext = this.context;
			}
			else if (ccl != null) {
				currentContextPerThread.put(ccl, this.context);
			}

			if (logger.isDebugEnabled()) {
				logger.debug("Published root WebApplicationContext as ServletContext attribute with name [" +
						WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE + "]");
			}
			if (logger.isInfoEnabled()) {
				long elapsedTime = System.currentTimeMillis() - startTime;
				logger.info("Root WebApplicationContext: initialization completed in " + elapsedTime + " ms");
			}

			return this.context;
		}
		catch (RuntimeException ex) {
			logger.error("Context initialization failed", ex);
			servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, ex);
			throw ex;
		}
		catch (Error err) {
			logger.error("Context initialization failed", err);
			servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, err);
			throw err;
		}
	}

 

参考资料

1、web.xml 通过contextConfigLocation配置spring 的方式

cloudfoundry的应用类型里 java_web 和 spring 有什么区别? java_web不允许使用spring吗? spring必须要使用spring吗?

cloudfoundry的应用类型里 java_web 和 spring 有什么区别? java_web不允许使用spring吗? spring必须要使用spring吗?

RT

cloudfoundry的应用类型里 java_web 和 spring 有什么区别? java_web不允许使用spring吗? spring必须要使用spring吗?

java – 在Spring mvc框架中使用Spring加载

java – 在Spring mvc框架中使用Spring加载

我使用带弹簧mvc的弹簧有一些问题.我在服务器上添加了弹簧加载的jar作为java代理.

现在,当我在我的情况下添加新方法时,我添加了一个新方法testHomes(),它给了我这个对话框.

enter image description here

以下是我的配置

enter image description here

enter image description here

我还检查了自动构建
我正在使用spring framework 4.2.5.RELEASE.

我从以下链接检查
SpringLoaded

与“热代码替换”不同,“热代码替换”仅在JVM运行时允许简单更改(例如对方法主体的更改),Spring Loaded允许您添加/修改/删除方法/字段/构造函数.还可以修改类型/方法/字段/构造函数的注释,并且可以在枚举类型中添加/删除/更改值.

有什么方法可以让我的工作吗?

问候,

最佳答案
什么是热代码替换?:

热代码替换(HCR)是一种调试技术,Eclipse Java调试器通过调试通道将新类文件传输到另一个JVM.在Eclipse开发的情况下,这也适用于运行运行时工作台的VM.我们的想法是,您可以在给定的运行时工作台上启动调试会话并更改开发工作台中的Java文件,调试器将在运行时替换接收VM中的代码.不需要重启,因此引用“热”.

当它工作时:

HCR仅在类签名不变时才有效;例如,您无法删除或添加现有类的字段.但是,HCR可用于更改方法的主体. HCR仅在1.4.1 VM及更高版本上可靠地实现,或者使用任何版本的IBM J9 VM. J9在IBM产品中可用,例如Websphere Studio Device Developer.

解决问题:

>检查您是否在受支持的VM上运行应用程序(请注意,运行Eclipse的JVM可能与运行Java应用程序的JVM不同).
>检查自动建筑是否已打开.确保’项目> “自动构建”已选中.
>检查Eclipse Tomcat Server上选择的以下选项.

enter image description here

参考文献:wiki.eclipse

java – 无法找到Spring NameSpaceHandler – Spring的mvc-basic在equinox中使用MANIFEST.MF类似于web-console Spring DM示例webapp

java – 无法找到Spring NameSpaceHandler – Spring的mvc-basic在equinox中使用MANIFEST.MF类似于web-console Spring DM示例webapp

试图在Equinox容器中部署 Spring的mvc-basic.

简短错误(完整如下):

org.springframework.beans.factory.parsing.BeanDeFinitionParsingException: Configuration problem: Unable to locate Spring   NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]
Offending resource: ServletContext resource [/WEB-INF/spring/app-config.xml]

mvc-basic的app-config.xml:
https://src.springframework.org/svn/spring-samples/mvc-basic/trunk/src/main/webapp/WEB-INF/spring/app-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- Scans the classpath of this application for @Components to deploy as beans -->
    <context:component-scan base-package="org.springframework.samples.mvc.basic" />

web-console的applicationContext.xml:
https://src.springframework.org/svn/spring-osgi/tags/spring-osgi-1.2.1/samples/web-console/war/src/main/webapp/WEB-INF/applicationContext.xml

略有改变(即,将spring-context.xsd更改为spring-context-3.0.xsd)以匹配mvc-basic的app-config.xml(补丁在下面链接):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:osgi="http://www.springframework.org/schema/osgi"
    xsi:schemaLocation="
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
      http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">

    <!-- Osgi package admin service reference -->   
    <osgi:reference id="packageAdmin" interface="org.osgi.service.packageadmin.PackageAdmin"/>

    <context:component-scan
        base-package="org.springframework.osgi.samples.console.service" />

资源:
https://src.springframework.org/svn/spring-samples/mvc-basic/trunk

Osgi补丁:
http://gist.github.com/631236

参考来源:
https://src.springframework.org/svn/spring-osgi/tags/spring-osgi-1.2.1/samples/web-console

修补程序将Spring更新为3.0.3.RELEASE并使上下文schemaLocation完全等于mvc-basic:
http://gist.github.com/631241

pax Runner捆绑文件改编自:
https://src.springframework.org/svn/spring-osgi/tags/spring-osgi-1.2.1/samples/web-console/war/libs/configuration/config.ini
http://gist.github.com/631268

跑步:
http://paxrunner.ops4j.org/space/Pax+Runner

pax-run --p=equinox http://gist.github.com/raw/631268/cfc79d68a309c5fed75e8030a5e3a74760d697f9/spring-osgi-1.2.1-web-console-and-mvc-basic.bundles

错误:

Timer-2 INFO [xml.XmlBeanDeFinitionReader] - Loading XML bean deFinitions from ServletContext resource [/WEB-INF/spring/app-config.xml]
Timer-2 ERROR [servlet.dispatcherServlet] - Context initialization Failed
org.springframework.beans.factory.parsing.BeanDeFinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]
Offending resource: ServletContext resource [/WEB-INF/spring/app-config.xml]

    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
    at org.springframework.beans.factory.xml.BeanDeFinitionParserDelegate.error(BeanDeFinitionParserDelegate.java:284)
    at org.springframework.beans.factory.xml.BeanDeFinitionParserDelegate.parseCustomElement(BeanDeFinitionParserDelegate.java:1332)
    at org.springframework.beans.factory.xml.BeanDeFinitionParserDelegate.parseCustomElement(BeanDeFinitionParserDelegate.java:1325)
    at org.springframework.beans.factory.xml.DefaultBeanDeFinitionDocumentReader.parseBeanDeFinitions(DefaultBeanDeFinitionDocumentReader.java:135)
    at org.springframework.beans.factory.xml.DefaultBeanDeFinitionDocumentReader.registerBeanDeFinitions(DefaultBeanDeFinitionDocumentReader.java:93)
    at org.springframework.beans.factory.xml.XmlBeanDeFinitionReader.registerBeanDeFinitions(XmlBeanDeFinitionReader.java:493)
    at org.springframework.beans.factory.xml.XmlBeanDeFinitionReader.doLoadBeanDeFinitions(XmlBeanDeFinitionReader.java:390)
    at org.springframework.beans.factory.xml.XmlBeanDeFinitionReader.loadBeanDeFinitions(XmlBeanDeFinitionReader.java:334)
    at org.springframework.beans.factory.xml.XmlBeanDeFinitionReader.loadBeanDeFinitions(XmlBeanDeFinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDeFinitionReader.loadBeanDeFinitions(AbstractBeanDeFinitionReader.java:143)
    at org.springframework.beans.factory.support.AbstractBeanDeFinitionReader.loadBeanDeFinitions(AbstractBeanDeFinitionReader.java:178)
    at org.springframework.beans.factory.support.AbstractBeanDeFinitionReader.loadBeanDeFinitions(AbstractBeanDeFinitionReader.java:149)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDeFinitions(XmlWebApplicationContext.java:124)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDeFinitions(XmlWebApplicationContext.java:93)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshbeanfactory(AbstractRefreshableApplicationContext.java:130)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshbeanfactory(AbstractApplicationContext.java:467)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
    at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4371)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
    at org.springframework.osgi.web.deployer.tomcat.TomcatWarDeployer.startCatalinaContext(TomcatWarDeployer.java:144)
    at org.springframework.osgi.web.deployer.tomcat.TomcatWarDeployer.startDeployment(TomcatWarDeployer.java:133)
    at org.springframework.osgi.web.deployer.support.AbstractWarDeployer.deploy(AbstractWarDeployer.java:93)
    at org.springframework.osgi.web.extender.internal.activator.WarLoaderListener$DeploymentManager$DeployTask.doRun(WarLoaderListener.java:257)
    at org.springframework.osgi.web.extender.internal.activator.WarLoaderListener$DeploymentManager$BaseTask.run(WarLoaderListener.java:215)
    at org.springframework.scheduling.timer.DelegatingTimerTask.run(DelegatingTimerTask.java:70)
    at java.util.TimerThread.mainLoop(Timer.java:512)
    at java.util.TimerThread.run(Timer.java:462)
Timer-2 ERROR [[localhost].[/mvc-basic]] - StandardWrapper.Throwable
org.springframework.beans.factory.parsing.BeanDeFinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]
Offending resource: ServletContext resource [/WEB-INF/spring/app-config.xml]

    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
    at org.springframework.beans.factory.xml.BeanDeFinitionParserDelegate.error(BeanDeFinitionParserDelegate.java:284)
    at org.springframework.beans.factory.xml.BeanDeFinitionParserDelegate.parseCustomElement(BeanDeFinitionParserDelegate.java:1332)
    at org.springframework.beans.factory.xml.BeanDeFinitionParserDelegate.parseCustomElement(BeanDeFinitionParserDelegate.java:1325)
    at org.springframework.beans.factory.xml.DefaultBeanDeFinitionDocumentReader.parseBeanDeFinitions(DefaultBeanDeFinitionDocumentReader.java:135)
    at org.springframework.beans.factory.xml.DefaultBeanDeFinitionDocumentReader.registerBeanDeFinitions(DefaultBeanDeFinitionDocumentReader.java:93)
    at org.springframework.beans.factory.xml.XmlBeanDeFinitionReader.registerBeanDeFinitions(XmlBeanDeFinitionReader.java:493)
    at org.springframework.beans.factory.xml.XmlBeanDeFinitionReader.doLoadBeanDeFinitions(XmlBeanDeFinitionReader.java:390)
    at org.springframework.beans.factory.xml.XmlBeanDeFinitionReader.loadBeanDeFinitions(XmlBeanDeFinitionReader.java:334)
    at org.springframework.beans.factory.xml.XmlBeanDeFinitionReader.loadBeanDeFinitions(XmlBeanDeFinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDeFinitionReader.loadBeanDeFinitions(AbstractBeanDeFinitionReader.java:143)
    at org.springframework.beans.factory.support.AbstractBeanDeFinitionReader.loadBeanDeFinitions(AbstractBeanDeFinitionReader.java:178)
    at org.springframework.beans.factory.support.AbstractBeanDeFinitionReader.loadBeanDeFinitions(AbstractBeanDeFinitionReader.java:149)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDeFinitions(XmlWebApplicationContext.java:124)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDeFinitions(XmlWebApplicationContext.java:93)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshbeanfactory(AbstractRefreshableApplicationContext.java:130)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshbeanfactory(AbstractApplicationContext.java:467)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
    at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4371)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
    at org.springframework.osgi.web.deployer.tomcat.TomcatWarDeployer.startCatalinaContext(TomcatWarDeployer.java:144)
    at org.springframework.osgi.web.deployer.tomcat.TomcatWarDeployer.startDeployment(TomcatWarDeployer.java:133)
    at org.springframework.osgi.web.deployer.support.AbstractWarDeployer.deploy(AbstractWarDeployer.java:93)
    at org.springframework.osgi.web.extender.internal.activator.WarLoaderListener$DeploymentManager$DeployTask.doRun(WarLoaderListener.java:257)
    at org.springframework.osgi.web.extender.internal.activator.WarLoaderListener$DeploymentManager$BaseTask.run(WarLoaderListener.java:215)
    at org.springframework.scheduling.timer.DelegatingTimerTask.run(DelegatingTimerTask.java:70)
    at java.util.TimerThread.mainLoop(Timer.java:512)
    at java.util.TimerThread.run(Timer.java:462)
Timer-2 ERROR [[localhost].[/mvc-basic]] - Servlet /mvc-basic threw load() exception
org.springframework.beans.factory.parsing.BeanDeFinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]
Offending resource: ServletContext resource [/WEB-INF/spring/app-config.xml]

    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
    at org.springframework.beans.factory.xml.BeanDeFinitionParserDelegate.error(BeanDeFinitionParserDelegate.java:284)
    at org.springframework.beans.factory.xml.BeanDeFinitionParserDelegate.parseCustomElement(BeanDeFinitionParserDelegate.java:1332)
    at org.springframework.beans.factory.xml.BeanDeFinitionParserDelegate.parseCustomElement(BeanDeFinitionParserDelegate.java:1325)
    at org.springframework.beans.factory.xml.DefaultBeanDeFinitionDocumentReader.parseBeanDeFinitions(DefaultBeanDeFinitionDocumentReader.java:135)
    at org.springframework.beans.factory.xml.DefaultBeanDeFinitionDocumentReader.registerBeanDeFinitions(DefaultBeanDeFinitionDocumentReader.java:93)
    at org.springframework.beans.factory.xml.XmlBeanDeFinitionReader.registerBeanDeFinitions(XmlBeanDeFinitionReader.java:493)
    at org.springframework.beans.factory.xml.XmlBeanDeFinitionReader.doLoadBeanDeFinitions(XmlBeanDeFinitionReader.java:390)
    at org.springframework.beans.factory.xml.XmlBeanDeFinitionReader.loadBeanDeFinitions(XmlBeanDeFinitionReader.java:334)
    at org.springframework.beans.factory.xml.XmlBeanDeFinitionReader.loadBeanDeFinitions(XmlBeanDeFinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDeFinitionReader.loadBeanDeFinitions(AbstractBeanDeFinitionReader.java:143)
    at org.springframework.beans.factory.support.AbstractBeanDeFinitionReader.loadBeanDeFinitions(AbstractBeanDeFinitionReader.java:178)
    at org.springframework.beans.factory.support.AbstractBeanDeFinitionReader.loadBeanDeFinitions(AbstractBeanDeFinitionReader.java:149)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDeFinitions(XmlWebApplicationContext.java:124)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDeFinitions(XmlWebApplicationContext.java:93)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshbeanfactory(AbstractRefreshableApplicationContext.java:130)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshbeanfactory(AbstractApplicationContext.java:467)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
    at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4371)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
    at org.springframework.osgi.web.deployer.tomcat.TomcatWarDeployer.startCatalinaContext(TomcatWarDeployer.java:144)
    at org.springframework.osgi.web.deployer.tomcat.TomcatWarDeployer.startDeployment(TomcatWarDeployer.java:133)
    at org.springframework.osgi.web.deployer.support.AbstractWarDeployer.deploy(AbstractWarDeployer.java:93)
    at org.springframework.osgi.web.extender.internal.activator.WarLoaderListener$DeploymentManager$DeployTask.doRun(WarLoaderListener.java:257)
    at org.springframework.osgi.web.extender.internal.activator.WarLoaderListener$DeploymentManager$BaseTask.run(WarLoaderListener.java:215)
    at org.springframework.scheduling.timer.DelegatingTimerTask.run(DelegatingTimerTask.java:70)
    at java.util.TimerThread.mainLoop(Timer.java:512)
    at java.util.TimerThread.run(Timer.java:462)

谢谢!

米莎

编辑:刚试用Spring DM 2.0.0.M1,开箱即用Spring 3.0.0.RC1.

相关的.bundles文件是:
弹簧Osgi的2.0.0.M1.bundles
http://gist.github.com/633280

弹簧Osgi的2.0.0.M1-与-MVC-basic.bundles
http://gist.github.com/633283

2.0.0.M1参考源:
https://src.springframework.org/svn/spring-osgi/tags/spring-osgi-2.0.0.M1/samples/web-console

不幸的是,2.0.0.M1 org.springframework.osgi.* jars在任何软件包存储库中都不可用(据我所知),所以你必须首先从这个subversion repo下载并编译spring-osgi-2.0.0.M1:
https://src.springframework.org/svn/spring-osgi/tags/spring-osgi-2.0.0.M1

解决方法

结果是需要OsgiBundleXmlWebApplicationContext.有用的参考:
http://static.springsource.org/osgi/docs/current/reference/html/web.html

检索相关补丁:

wget http://gist.github.com/raw/648295/452aaeeceed8fae6b9a4d035a5c2d2ad939f65bf/mvc-basic-osgi-works.patch

使用Osgi启动mvc-basic的命令:

svn checkout https://src.springframework.org/svn/spring-samples/mvc-basic/trunk --quiet && cd trunk && patch -p0 < ../mvc-basic-osgi-works.patch && mvn clean install -DskipTests && bash run.sh

这假设您已将mvc-basic-osgi-works.patch下载到当前文件夹中.

有些东西似乎仍然不起作用,例如${pageContext …}标签,但除此之外似乎有效.

米莎

JavaWeb_(Spring 框架) SpringAOP 面向切面编程

JavaWeb_(Spring 框架) SpringAOP 面向切面编程

 

 

  SpringAOP: 面向切面编程 (面向 fifter 编程)  

  通俗易懂术语:所有纵向重复的代码,我们提取成横向的代码

  

 

 

 

  以下文章内容参考知乎:从 0 带你学习 SpringAOP,彻底的理解 AOP 思想  传送门

 

1、什么是 AOP?
更为准确的说 AOP 其实是一种软件设计思想,而不是一种特定技术,但是它又可以应用到任何的技术领域,只要是理解了 AOP 这种思想,其实都可以将它运用到项目中去。

  

  既然说这到这个问题,那么到底什么是 AOP?它又是应用在哪些场景下呢?    

  AOP 在我看来可以用一句很简单的话来进行概述就是,“程序在运行时,动态的将代码切入到类的指定方法或者说指定位置上”,这就是 AOP。这样说大家是不是有点明白了。

Java 中面向对象的三大特征分为封装、继承、多态,假设现在有两个类,一个为 Teacher(老师类)和 Student(学生类),学生和老师都得吃饭、睡觉,但是老师和学生有具有自己的一些行为,比如老师会教书,但是学生不需要教书,学生却需要听课,根据面向对象的三大特征,我们可以将老师和学生的共同所具有的行为提取出来,让老师和学生去继承就可以,这样就提高了我们代码的复用性。

 

  我曾经以为这样就很完美了,直到我遇到这种情况,这是一个方法,进入方法执行方法体的时候,要先开启事务,最后提交事务,并且每个方法都是受事务控制的,这样我们可以发现,出现了大量的重复代码,那么有没有什么什么比较好的办法,来解决这个问题呢?

  

 

 

   画这样一个图,大家应该就可以看的更清楚了,我们的业务代码就是圈里面的核心,事务管理在圈的外层,我们的业务代码是受事务的管控的。

  

 

  再来一个更直观的图,可以看到,现在将我们的业务代码和原来重复的代码进行了分离,独立为一个单独的模块,这样我们的业务中就不会有那么多冗余的代码了。但是大家可能又要问了,你这么分离出来,怎么样将它融合进去呢?其实这就是 AOP 解决的问题。

  

 

 2. AOP 的应用场景

从上面的例子中大家应该可以大致了解 AOP 的作用,那么在实际的开发中呢想要使用 AOP 它是需要一些场景的,像一些比较常见的场景就是:系统的性能检测、访问控制、事务管理以及日志记录。

  我现在在做的项目中在权限控制、日志记录、匹配映射参数都是使用 AOP 来完成的,所以说搞懂 AOP 可以帮你做好多事情。

 

3. AOP 的术语

1) 连接点(JoinPoint)
什么是连接点,看了一下官方的,看完懵逼,说的太官方了,其实所谓的连接点就是 “一个应用执行过程中能够插入一个切面的点”,比如说黑客攻击你的电脑,他总要找到一个入口,没有入口就无法进行攻击,连接点就相当于这个入口;

2) 切点(Pointcut)
一个程序中可能存在多个连接点,如果我们想要找到我们需要的连接点,那么就需要根据切点来进行定位;

3) 增强(Advice)
增强就是织入目标类连接点上的一段代码,就是黑客进入到你的电脑后要做的事情;

4) 目标对象(Targer)
增强逻辑的织入目标类,黑客攻击你的电脑,那么你的电脑就是目标类;

5) 引介(IntroductIon)
引介是一种特殊的增强,它为类添加了一些属性和方法。这样,即使一个业务类原本没有实现某个接口,通过 AOP 的引介功能,也可以动态地为该业务添加接口的实现逻辑,让业务类变成这个接口的实现;

6) 织入(Weaving)
织入其实就是将我们增强的代码添加到具体连接点上的过程;

7) 代理(Proxy)
一个类被 AOP 织入增强后,就产生了一个结果类,它融合了原类和增强逻辑的代理类;

8) 切面(Aspect)
切面有切点和增强组成,它既包括横切逻辑的定义,也包括连接点的定义;
通过前面简单的介绍,相比大家对 AOP 已经有了一个简单的认识,后面再说了一下 AOP 的一些术语,大家好好把这些理解一下,一定要把这些概念理清楚,后面才不会混淆。今天先带大家简单认识一下 AOP,下篇带大家做一些例子,从而更亲近的认识 AOP。

 

 

 

 

 

 

 

我们今天的关于在 WEB 应用中使用 Spring(框架)如何在web应用中配置spring的分享已经告一段落,感谢您的关注,如果您想了解更多关于cloudfoundry的应用类型里 java_web 和 spring 有什么区别? java_web不允许使用spring吗? spring必须要使用spring吗?、java – 在Spring mvc框架中使用Spring加载、java – 无法找到Spring NameSpaceHandler – Spring的mvc-basic在equinox中使用MANIFEST.MF类似于web-console Spring DM示例webapp、JavaWeb_(Spring 框架) SpringAOP 面向切面编程的相关信息,请在本站查询。

本文标签: