- 浏览: 1010354 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 1361分为定义,初始化,使用,消亡 写个例子测试一下: 第一 ... -
反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)(转)
2011-04-13 10:13 1036好长时间没有用过Spring了. 突然拿起书.我都发现自己对A ... -
从spring的IOC说起(二)——spring的Bean的基础配置(转)
2011-03-27 00:38 1321上次简单的说了下spring的IOC,也说到了spring ... -
从spring的IOC说起(一)(转)
2011-03-26 23:37 1003这段时间也着实好 ... -
Spring mvc 转发、重定向(转)
2011-01-24 16:29 2576spring控制器最后返 ... -
SSH整合,"sessionFactory " or "hibernateTemplate " is required异常
2010-11-11 15:35 3256将ssh整合时,出现如下异常: 2010-11-11 ... -
spring tx:advice 和 aop:config 配置事务(转)
2010-11-08 16:39 1933<?xml version="1.0&q ... -
Org.springframework.orm.hibernate3.*类讲解(转)
2010-10-08 10:04 1456org.springframework.orm.hiberna ... -
spring与hibernate配置jar包功能详解(转)
2010-09-12 22:14 1239近搞SSH和一个框架的整 ... -
Spring 注解学习手札(六) 测试
2010-08-04 21:45 1545既然系统基于注解自成一体,那么基于Spring的测试是否可以依 ... -
Spring 注解学习手札(五) 业务层事务处理
2010-08-04 21:45 1891控制器层、持久层都有了一些介绍,剩下的就是业务层了! 业务层中 ... -
Spring 注解学习手札(四) 持久层浅析
2010-08-04 21:44 1177今天,我们玩玩数据库,搞搞持久层。不搞太复杂的东西,Sprin ... -
Spring 注解学习手札(三) 表单页面处理
2010-08-04 21:43 1278昨天小歇一天,看着两篇博客迅速飙升的点击率,十分欣慰。今天来研 ... -
Spring 注解学习手札(二) 控制层梳理
2010-08-04 21:42 1123昨天对Spring注解有了一 ... -
Spring 注解学习手札(一) 构建简单Web应用
2010-08-04 21:39 1164这个系列学习笔记皆来源于大牛的博客:http://snowol ...
相关推荐
Spring框架作为Java领域中最流行的轻量级框架之一,通过其强大的依赖注入(Dependency Injection, DI)特性极大地简化了这种依赖关系的管理。本文将详细介绍如何使用MyEclipse这一集成开发环境(IDE)来查看Spring...
Spring的核心设计原则是依赖注入,通过反转控制,将对象之间的依赖关系交由框架管理,使代码更易于测试和解耦。在5.2.6.RELEASE版本中,DI的实现更加灵活和强大,支持构造器注入、setter注入以及基于注解的注入方式...
1. **依赖注入(DI)**:通过 DI,Spring 可以管理对象之间的关系,使得代码更松耦合。开发者不再需要在代码中直接创建对象,而是通过配置文件或注解声明依赖,由 Spring 容器负责实例化和组装。 2. **面向切面编程...
2. **依赖注入(Dependency Injection, DI)** Spring的DI是其核心特性之一,通过XML配置或注解方式实现对象之间的依赖关系。在5.3.4版本中,DI机制更加成熟,支持更灵活的构造器注入和方法注入,帮助开发者实现松...
Spring Desktop提供了事件模型、窗口管理、服务定位等功能,使得桌面应用的开发变得更加便捷。此外,Spring的IoC(Inversion of Control)容器可以管理桌面应用中的对象生命周期,而AOP(Aspect-Oriented ...
依赖注入是Spring的重要特性,它允许我们在不修改代码的情况下更改对象的依赖关系。在本项目中,游戏逻辑中的各种组件可以通过构造函数、setter方法或者接口回调等方式接受它们所需的服务。例如,游戏主角可能依赖于...
2. `org.springframework.web.struts`:Spring与Struts的整合模块,展示了Spring如何将依赖注入和AOP等特性引入Struts应用,使得控制层更加灵活和解耦。 3. `org.springframework.context`:这是Spring的核心模块,...
在本项目中,Spring主要作为依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)的容器。Spring 3.0引入了更多的模块,如Spring MVC用于构建Web应用,Spring JDBC和Spring ORM...
1. 容器(20%):这部分考察对Spring容器的理解,包括Bean的生命周期和依赖注入。 2. AOP(8%):涉及面向切面编程的原理和实践,如何使用AspectJ和Spring AOP实现切面。 3. JDBC(4%):测试考生对数据库连接和操作...
它通过依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)来促进良好的编程实践。Spring 5.0.4引入了对Java 9和Java模块系统的支持,同时增强了对反应式编程的支持,这是现代...
首先,Spring框架(版本3)是Java开发中的核心组件,它提供了依赖注入(DI)和面向切面编程(AOP)等功能,极大地简化了应用的结构和管理。Spring框架包括多个模块,如Core Container(核心容器)、Data Access/...
其次,Spring是Java领域的一个核心框架,它为开发者提供了依赖注入(DI)、面向切面编程(AOP)以及各种企业级服务,如数据访问、事务管理等。在本项目中,Spring很可能被用作整个系统的胶水层,连接EXT前端与后端...
Spring框架以其强大的依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)能力,为系统提供了稳定且可扩展的基础架构。 首先,Spring框架是Java开发中的一个重要组件,它简化...
Spring框架是Java开发中的核心组件,它提供了丰富的功能来简化应用程序的构建,包括依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等。Eclipse是一款广泛使用的Java集成开发环境(IDE),对于Java开发者来...
3. Spring:Spring框架提供了一个全面的应用程序开发模型,包括依赖注入、面向切面编程、事务管理等。在本系统中,Spring作为整个应用的“胶水”,负责各个组件的组装和管理。例如,通过Spring的依赖注入,我们可以...
1. **Spring框架**:Spring是一个开源的Java企业级应用开发框架,它提供了全面的编程和配置模型,简化了Java开发工作,包括依赖注入、面向切面编程、数据访问、事务管理等。 2. **源码获取**:要获取Spring的源码,...
Spring是一个全面的Java企业级应用开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,简化了Java应用的开发和维护。在本项目中,Spring用于管理各个组件的生命周期,实现业务逻辑的解耦。它还可能...
1. **Spring 4.1.3**: Spring是Java企业级应用的核心框架,提供了依赖注入(DI)和面向切面编程(AOP)等特性。Spring 4.1.3是该版本系列的一个稳定版本,支持Java 8,并改进了对JPA、JMS和WebSocket的支持。 2. **...
- **降低组件之间的耦合度**: Spring通过依赖注入等机制帮助实现软件各层之间的解耦,提高了系统的可维护性和灵活性。 - **提供丰富的服务**: 包括但不限于事务管理服务、消息服务、JMS服务、持久化服务等,简化了...
本项目使用了`extjs4`作为前端框架,`structs2`作为MVC Web应用框架,`spring`处理业务逻辑和依赖注入,以及`hibernate`作为ORM(对象关系映射)工具,来搭建一个完整的后台系统。下面将详细介绍这四个技术及其在...