- 浏览: 994860 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (394)
- OSGI (14)
- 多线程 (10)
- 数据库 (30)
- J2ME (1)
- JAVA基础知识 (46)
- 引用包 (1)
- 设计模式 (7)
- 工作流 (2)
- Ubuntu (7)
- 搜索引擎 (6)
- QT (2)
- Ubuntu下编程 (1)
- 小程序 (2)
- UML (1)
- Servlet (10)
- spring (16)
- IM (12)
- 文档视频转为flash格式在线播放 (19)
- Maven (8)
- 远程调用 (2)
- PHPRPC (1)
- EXTJS学习 (2)
- Hibernate (16)
- 技术文章 (38)
- flex (5)
- 海量数据处理 (5)
- FTP (8)
- JS (10)
- Struts (1)
- hibernate search (13)
- JQuery (2)
- EMail (3)
- 算法 (4)
- SVN (7)
- JFreeChart (4)
- 面试 (4)
- 正规表达式 (2)
- 数据库性能优化 (10)
- JVM (6)
- Http Session Cookie (7)
- 网络 (12)
- Hadoop (2)
- 性能 (1)
最新评论
-
hy1235366:
能够随便也发一下,你退火算法程序使用的DistanceMatr ...
模拟退火算法总结(含例子)(转) -
梅强强:
感谢分享。。帮大忙了
swftools转换文件时线程堵塞问题的解决方法 -
wenlongsust:
openoffice和文件不在同一个服务器上,用过吗?
[JODConverter]word转pdf心得分享(转) -
2047699523:
如何在java Web项目中开发WebService接口htt ...
利用Java编写简单的WebService实例 -
abingpow:
唉,看起来好像很详细很不错的样子,可惜不是篇面向初学者的文章, ...
Spring与OSGi的整合(二)(转)
有时我们使用spring的注入的时候不成功,如我们在一个地方实例化一个类,这个类里面就用到依赖注入的方式,我们也在spring配置文件里写好了让它去扫描这个包,将该类纳入spring容器管理,但当我们实例化它的时候,它里面的spring的bean并没有注入,这是为什么,因为我们虽然将这个类纳入spring容器管理,但是当我们实例这个类时,这个是我们自己实例化的对象,它不属于spring管理范围,也就是不是由spring实例化的,所以它里面用到的spring的注入是不成功的。我这个是在使用phprpc里发布一个服务器,遇到的问题,发布如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="org.phprpc.*" %> <%@ page import="org.edu.scut.lab24.project.service.impl.RemoteServiceImpl" %> <%@ page import="org.edu.scut.lab24.project.service.IRemoteService" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>PHPRPC</title> </head> <body> <% //这里必须使用接口定义 IRemoteService remoteService = new RemoteServiceImpl(); //实例化phprpc服务 PHPRPC_Server phprpc_server = new PHPRPC_Server(); //在这里把RemoteServiceImpl发布出来 phprpc_server.add(remoteService); phprpc_server.start(request, response); %> </body> </html>
这个实例化就是自己的实例化,不是spring并不纳入spring管理范围,所以在RemoteServiceImpl里用到spring注解里是不能注入成功的,解决的办法,自己手动加载spring配置文件,
也就是再实例化一个spring容器,然后从容器里获取bean,如下:
1 可先建一个spring容器实例化的类,这样当你想在自己想使用spring容器的时候就用这同一个(这里以静态变量的形式存在),而不用每次都实例化一个新的spring容器,这样才不会过度消耗内容资源。
import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * 初如化spring上下文环境,初始化xml文件 * @author Administrator * */ public class AppContext { private static AppContext instance; private String[] PATH = {"classpath:applicationContext.xml"}; private AbstractApplicationContext applicationContext; public synchronized static AppContext getInstance(){ if(instance == null) instance = new AppContext(); return instance; } public AppContext(){ this.applicationContext = new ClassPathXmlApplicationContext(PATH); } public AbstractApplicationContext getAbstractApplicationContext(){ return this.applicationContext; } }
当你在如上面的例子里的RemoteServiceImpl类用到注入,假设如下
@Resource private IFileService fileServiceImpl;
那你就可以用下面的方式来获得注入的bean(在构造函数或你想用的地方):
if(fileServiceImpl == null) fileServiceImpl = (FileServiceImpl)AppContext.getInstance().getAbstractApplicationContext().getBean("fileServiceImpl");
你可能会问,不什么不将fileServiceImpl直接用new FileServiceImpl 方式来实现,因为当FileServiceImpl
里面又用到注解,并用到spring对数据库的操作,所以这里只能用spring提供的bean来实例化它,即让它们处于spring容器的管理下。
你可能还会问你用struts里它跳到action类去,你也不没有实例化它,它里面用到的spring注解怎么又可以用呢?因为在web.xml里面就配置了spring监听web的请求,应该是将请求处理的action纳入spring容器去管理,我的web.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" 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 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <welcome-file-list> <welcome-file>upload.jsp</welcome-file> </welcome-file-list> <!--########### 初始化日志系统 ##################--> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/log4j.properties</param-value> </context-param> <!--########## Spring默认刷新Log4j配置文件的间隔,单位为millisecond #########--> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <!--########### 初始化Spring上下文 ##################--> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:applicationContext.xml </param-value> </context-param> <!--Spring log4j Config loader--> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <!--Spring ApplicationContext 载入 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
所以我们的请求跳到action类去处理时,在action类里的注解是可以注入的。
而当我在web.xml配置一个servlet,而在客户端(我使用jquery uploadify组件)请求就指定用该servlet来处理,而当这个servlet里面用到spring注解的时候,它会在客户请求时发生异常,出现如下异常:
严重: Allocate exception for servlet uploadServlet javax.naming.NameNotFoundException: Name org.lab24.file.servlet.UploadServlet is not bound in this Context at org.apache.naming.NamingContext.lookup(NamingContext.java:770) at org.apache.naming.NamingContext.lookup(NamingContext.java:153) at org.apache.catalina.util.DefaultAnnotationProcessor.lookupFieldResource(DefaultAnnotationProcessor.java:278) at org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:187) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1120) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584) at java.lang.Thread.run(Unknown Source)
开始我以有是我的web.xml没配置好,老是说servlet不能在邦定,其它是这个servlet里面的的注解不能邦定,所在这里要想用spring注解,可以用上面的方式来自己加载spring容器,或都可以在web.xml里配置使用请求的servlet处理bean也交给spring管理,这个我就不会配置,知道的网友希望告诉一下我。
最后总结一下:
1 当你使用直接实倒化一个类(里面用到spring的注解)时,是不没有交给spring容器管理的,除了你自己在类里面加载spring容器。
2 处理用户的请求类,只有在web.xml里配置了交由spring管理的,才能使用spring的注解,不然只能手动实例化spring容器后才能用。
发表评论
-
spring bean的生命周期(转)
2011-04-13 11:26 1326分为定义,初始化,使用,消亡 写个例子测试一下: 第一 ... -
反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)(转)
2011-04-13 10:13 1003好长时间没有用过Spring了. 突然拿起书.我都发现自己对A ... -
从spring的IOC说起(二)——spring的Bean的基础配置(转)
2011-03-27 00:38 1278上次简单的说了下spring的IOC,也说到了spring ... -
从spring的IOC说起(一)(转)
2011-03-26 23:37 970这段时间也着实好 ... -
Spring mvc 转发、重定向(转)
2011-01-24 16:29 2530spring控制器最后返 ... -
SSH整合,"sessionFactory " or "hibernateTemplate " is required异常
2010-11-11 15:35 3218将ssh整合时,出现如下异常: 2010-11-11 ... -
spring tx:advice 和 aop:config 配置事务(转)
2010-11-08 16:39 1897<?xml version="1.0&q ... -
Org.springframework.orm.hibernate3.*类讲解(转)
2010-10-08 10:04 1421org.springframework.orm.hiberna ... -
spring与hibernate配置jar包功能详解(转)
2010-09-12 22:14 1213近搞SSH和一个框架的整 ... -
Spring 注解学习手札(六) 测试
2010-08-04 21:45 1510既然系统基于注解自成一体,那么基于Spring的测试是否可以依 ... -
Spring 注解学习手札(五) 业务层事务处理
2010-08-04 21:45 1855控制器层、持久层都有了一些介绍,剩下的就是业务层了! 业务层中 ... -
Spring 注解学习手札(四) 持久层浅析
2010-08-04 21:44 1146今天,我们玩玩数据库,搞搞持久层。不搞太复杂的东西,Sprin ... -
Spring 注解学习手札(三) 表单页面处理
2010-08-04 21:43 1238昨天小歇一天,看着两篇博客迅速飙升的点击率,十分欣慰。今天来研 ... -
Spring 注解学习手札(二) 控制层梳理
2010-08-04 21:42 1084昨天对Spring注解有了一 ... -
Spring 注解学习手札(一) 构建简单Web应用
2010-08-04 21:39 1132这个系列学习笔记皆来源于大牛的博客:http://snowol ...
相关推荐
(一) Spring 开发 Swing GUI 简介——依赖注入和富客户机 5 关于本教程 5 前提条件 6 Spring 和依赖注入概述 7 什么是 Spring 框架? 7 什么是依赖注入? 7 环境设置 7 选择编译环境 7 设置 Ant 8 通过 Ant 自动下载...
Spring Bean的依赖注入。 使用JUnit和Mockito实现的单元测试。 集成测试使用Spring Test。 目标运行时环境:Apache Tomcat。应用的Gradle功能Gradle包装器的用法。 部署到嵌入式容器以进行本地开发。运行应用程序您...
QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新好友列表,响应用户双击的事件,并得到好友的编号,把聊天界面加入到管理类,设置密码保护等。 Java编写的网页版魔方游戏 内容索引:JAVA...
QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新好友列表,响应用户双击的事件,并得到好友的编号,把聊天界面加入到管理类,设置密码保护等。 Java编写的网页版魔方游戏 内容索引:JAVA...
其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决...
体验.net2.0的优雅(四):Provider、策略、控制反转和依赖注入 泛型最佳实践 asp.net 2.0下嵌套masterpage页的可视化编辑 C# 2.0与泛型 动态调用对象的属性和方法——性能和灵活性兼备的方法 泛型技巧系列:用泛型...
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....