`
chembo
  • 浏览: 943030 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

spring在filter中注入bean

阅读更多
由于filter不属于spring容器管理,所以filter内不能注入bean;为解决此问题我们写了个listener,在web启动时将spring context丢进去.这样就可以从filter里拿到我们想要的bean了.
public class StartupListener extends ContextLoaderListener implements
		ServletContextListener {
	
	protected Logger log = LoggerFactory
			.getLogger(StartupListener.class);

	public void contextInitialized(ServletContextEvent event){
		
		if (log.isDebugEnabled()) {
			log.debug("initializing context...");
		}

		// call Spring's context ContextLoaderListener to initialize
		// all the context files specified in web.xml
		super.contextInitialized(event);

		ServletContext context = event.getServletContext();
		setServletContext(context);

		ApplicationContext ctx = WebApplicationContextUtils
				.getRequiredWebApplicationContext(context);
		setAppContext(ctx);

		setupContext(context);
	}

	public static void setupContext(ServletContext context) {
		
	}

	public static Object getBean(String beanName) {
		return appContext.getBean(beanName);
	}

	/**
	 */
	private static ApplicationContext appContext;

	public static ApplicationContext getAppContext() {
		return appContext;
	}

	public static void setAppContext(ApplicationContext ctx) {
		appContext = ctx;
	}

	/**
	 * ServletContext
	 */
	private static ServletContext servletContext;

	/**
	 * @return Returns the servletContext.
	 */
	public static ServletContext getServletContext() {
		return servletContext;
	}

	/**
	 * @param servletContext
	 *            The servletContext to set.
	 */
	public static void setServletContext(ServletContext servletContext) {
		StartupListener.servletContext = servletContext;
	}

	public static String getServletWebInfRealPath() {
		return servletContext.getRealPath("WEB-INF");
	}

}

web.xml
<listener>
        <listener-class>com.portal.listener.StartupListener</listener-class>
    </listener>

注意的是,如果你使用了spring的mvc,那么原来的
<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener> 

就要去掉,否则会报multipul ContextLoaderListener,因为这个是继承了ContextLoaderListener的.
然后就是使用了,在你的filter里通过:
StartupListener.getBean("beanname");

分享到:
评论
1 楼 JavaAiHaoZhezh 2016-12-15  

相关推荐

    Spring 管理filter 和servlet

    开发者无需在Filter或Servlet内部硬编码bean名称,而是通过Spring容器自动注入所需的依赖,大大提升了代码的整洁度和复用性。此外,Spring提供的Filter和Servlet代理类,进一步简化了集成过程,使开发者可以专注于...

    Spring学习笔记(9)----让Spring自动扫描和管理Bean

    除了基本的`@Component`家族,Spring还提供了一些高级注解,如`@Scope`用于定义Bean的作用域,`@Lazy`用于延迟初始化Bean,`@Qualifier`用于在多个相同类型的Bean中指定特定的一个。 ### **总结** Spring的自动...

    特殊情况(ActionForm,Servlet, Filter, Listener)下Spring如何注入对象

    在Spring框架中,如果需要在ActionForm中注入其他对象,例如数据库访问层的服务,可能会遇到问题,因为ActionForm通常是非Spring管理的bean。 针对这个问题,一种解决办法是将注入的属性声明为静态,并修改setter...

    web.xml文件中配置(servlet, spring, filter, listenr)的加载顺序

    在`web.xml`中配置Spring时,通常通过Listener来加载Spring容器,这样可以在应用程序启动时初始化所有的Spring Bean。 **示例代码:** ```xml org.springframework.web.context.ContextLoaderListener ...

    详解 Spring 3.0 基于 Annotation 的依赖注入实现

    在 Spring 框架的早期版本中,依赖注入(Dependency Injection, DI)主要通过 XML 配置文件来实现。随着 Java 技术的发展和应用需求的变化,Spring 3.0 引入了基于注解(Annotation)的依赖注入方式,极大地简化了...

    spring MVC所需jar包和filter的配置

    在Spring MVC中,常见的Filter包括字符编码Filter、登录验证Filter等。 - `CharacterEncodingFilter`:确保请求和响应的字符编码一致,防止乱码问题。配置示例: ```xml &lt;filter&gt; &lt;filter-name&gt;...

    spring jar 包详解

    - **功能简介**:包含在应用中使用 Spring 的 AOP 特性时所需的类,如声明式事务管理。 - **应用场景**:适用于需要使用 AOP 功能的项目。 - **依赖关系**:依赖于 `spring-core.jar`、`spring-beans.jar`、`cglib-...

    Spring 3 Reference中文

    Spring中bean的范围定义了它的生命周期以及一个bean实例是否对单个请求、会话、整个Web应用可用。 4.6 自定义bean的性质 开发者可以为bean定义生命周期回调方法,以实现初始化和销毁逻辑。另外,还可以通过实现特定...

    struts+spring

    4. **Action类与Spring的结合**:在Struts的Action类中,不再直接创建Service或DAO的实例,而是声明为成员变量,并用`@Autowired`注解(如果是Spring3及以上版本)或Spring的`&lt;bean&gt;`标签进行注入。这样,Struts ...

    spring笔记

    + 启动 Spring 容器加载配置文件,实例化其中配置好的对象,并按照指定的名字存在 Spring 容器中 BeanFactory 和 ApplicationContext * BeanFactory:延迟加载,使用 bean 时才进行初始化 * ApplicationContext:...

    Spring的学习笔记

    Spring框架是Java开发中的核心组件,它提供了许多高级特性,如依赖注入(Dependency Injection, DI)、面向切面编程(Aspect-Oriented Programming, AOP)以及容器管理的事务等。以下将详细介绍Spring学习笔记中的...

    struts2和Spring整合需要的jar包

    Struts2会自动从Spring容器中查找并注入Action所需的bean。 通过这样的整合,我们能够实现业务逻辑和视图层的解耦,使代码更加模块化,便于维护和扩展。同时,Spring的IoC和AOP特性也能够更好地支持企业级应用的...

    spring2中文手册

    Spring框架是Java开发中不可或缺的一部分,它以其模块化、易用性和灵活性著称。Spring2中文手册是针对Spring框架的早期版本2.x提供的一份详细文档,旨在帮助开发者理解和掌握这个版本的核心特性和使用方法。以下是对...

    spring security 3.0.5中文详解

    - **配置Spring Security Bean**:接下来需要在Spring的配置文件中定义过滤器链以及其他Spring Security组件。 ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    Spring2.zip

    Spring框架是中国著名的Java开发者Rod Johnson在其著作《Expert One-on-One J2EE Design and Development》中提出的,它旨在简化企业级应用开发,通过依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-...

    shiro整合spring+springmvcjar包

    在Java Web 开发中,Shiro 被广泛用于构建安全控制层,而Spring 和 Spring MVC 则是两个流行的Java企业级应用开发框架,分别负责依赖注入和Web MVC层面的处理。将Shiro 整合到Spring 和 Spring MVC 中,可以实现统一...

    Spring 面试题分析_尚硅谷_佟刚

    在Spring中配置Bean有多种方式,包括通过全类名(使用反射)、通过工厂方法(静态工厂方法或实例工厂方法),以及使用FactoryBean来创建Bean实例。Bean的生命周期由Spring IoC容器管理,包括Bean的创建、属性设置、...

    spring在web.xml中和在struts中的不同配置.[收集].pdf

    Struts2插件负责在Action执行时从Spring容器中查找并注入Bean。 总结一下,Spring在`web.xml`中的配置主要关注ApplicationContext的初始化和配置文件的位置,而Struts中的配置则是在Struts2配置文件中声明Action和...

    spring面试题.doc

    1. **依赖注入(DI)**:在Spring中,DI可以通过以下几种方式进行: - Setter注入:通过调用Bean的setter方法设置依赖对象。 - 构造器注入:通过构造函数传递依赖对象。 - 注解注入:使用`@Autowired`,`@...

Global site tag (gtag.js) - Google Analytics