前提:已经配送好spring,在struts中用@Autowired可以正常注入。新建servlet,使用@Autowired发现不能注入bean的情况下,使用以下方法:
一、写个基础servlet,此servlet用于代理查找相应的servlet
public class DelegatingServletProxy extends GenericServlet{
private static final long serialVersionUID = -4708556750740588204L;
private String targetBean;
private Servlet proxy;
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
proxy.service(req, res);
}
@Override
public void init() throws ServletException {
this.targetBean = getServletName();
getServletBean();
proxy.init(getServletConfig());
}
private void getServletBean() {
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
this.proxy = (Servlet) wac.getBean(targetBean);
}
}
二、
1、在具体的servlet中加入@Component("")
2、用@Autowired注入具体的service层bean类,如下创建了A和B servlet。
@Component("A")
public class A extends HttpServlet {
@Autowired
private ArticletypeService articletypeService;
.............
}
@Component("B")
public class A extends HttpServlet {
@Autowired
private ArticletypeService articletypeService;
.............
}
3、修改web.xml
把A、BSservlet的servlet-class类路径改成代理servlet,既DelegatingServletProxy的路径。
<!-- 代理servlet不需要
<servlet>
<servlet-name>DelegatingServletProxy</servlet-name>
<servlet-class>com.web.DelegatingServletProxy</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DelegatingServletProxy</servlet-name>
<url-pattern>/servlet/DelegatingServletProxy</url-pattern>
</servlet-mapping>
-->
<servlet>
<servlet-name>A</servlet-name>
<servlet-class>com.web.DelegatingServletProxy</servlet-class>
</servlet>
<servlet>
<servlet-name>B</servlet-name>
<servlet-class>com.web.DelegatingServletProxy</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>A</servlet-name>
<url-pattern>/servlet/A</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>B</servlet-name>
<url-pattern>/servlet/B</url-pattern>
</servlet-mapping>
4、在servlet中bean注入成功
以上内容不实用代理和@Autowired写法为:
public class MetaInitServlet extends HttpServlet {
private SysParametersService sysParametersService;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
.............
.............
}
public void init() throws ServletException {
WebApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
sysParametersService = (SysParametersService) context.getBean("SysParametersService");
}
}
分享到:
相关推荐
Spring的注入在Servlet中使用:在Servlet中使用Spring注入的信息,需要WebApplicationContext这个专门为Web准备的应用上下文
在 Java 应用中使用 Spring,我们需要创建一个 Spring 上下文(ApplicationContext)来加载 Bean 的定义。这个上下文将负责创建和管理 Bean,以及执行依赖注入。通常,我们可以使用 `ClassPathXmlApplicationContext...
使用spring的依赖注入,来实现servlet中注入dao层
然而,在某些情况下,我们可能需要在非Spring注解的类中访问Spring容器中的Bean,或者在这些类中使用YAML配置文件中的配置信息。本篇将详细介绍如何在这样的场景下实现这一目标。 首先,让我们来理解如何在非Spring...
因此,在使用 DependsOn 注解时,需要了解 Spring 中 bean 的加载过程,以免出现错误。 其他实现方式 除了上述两种方式外,还有其他方式可以控制 2 个 bean 的初始化顺序。例如,可以使用 Spring 的 @Order 注解来...
spring动态向容器中添加bean和删除指定bean,不需要重启应用
让我们深入探讨这两个注解的工作原理,以及它们在注入bean时的顺序。 `@Autowired`注解由Spring提供,用于自动装配bean的依赖。当我们在字段、构造函数、方法或方法参数上使用`@Autowired`时,Spring会自动查找与所...
@Bean 可以使用在方法上,以便将该方法的返回值转换为一个 Spring bean。 在 Spring Boot 中,以上几种注入方法都是非常重要的,它们可以帮助我们在编写 Spring Boot 应用程序时,使代码更加简洁、灵活和可维护。
在上述例子中,`Student`类中的`teacher`字段使用`@Autowired`注解,Spring会自动找到`Teacher`类型的Bean进行注入。 总之,Spring提供了多种方式来定义和管理Bean,从XML到注解再到Java配置,使得开发更加灵活高效...
总之,在Servlet中直接获取Spring的Bean可以帮助简化代码,减少重复的工作,并利用Spring的依赖注入能力。然而,这种方式应该谨慎使用,因为它可能破坏了依赖注入的初衷,使得代码更难测试和维护。在可能的情况下,...
在Spring中,一个Bean通常代表应用中的一个对象,这些对象由Spring容器创建、管理并提供给其他组件使用。Spring容器通过XML配置文件或注解来定义Bean及其相互关系。 3. **XML配置文件**: "spring-beans"是Spring...
- **属性注入**:Spring会将依赖注入到Bean中,包括值注入(value,ref)和集合注入(list,map,props,set)。 - **初始化回调**:Spring支持两种类型的初始化回调方法,即`@PostConstruct`注解的方法和在XML中...
在Spring框架中,依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)是两大核心特性,同时自动注入Bean也是Spring管理对象的一种常见方式。让我们深入探讨这些概念。 首先,...
然而,静态方法和静态变量不参与Spring的生命周期管理,因此,尝试在静态字段或静态方法中直接使用`@Autowired`注入Bean会导致空指针异常,因为Spring容器不会初始化静态成员。 **解决方法1:使用@Component和非...
在Spring Boot中,属性注入是核心特性之一,它使得我们可以方便地将配置文件中的参数值注入到Bean类的属性中,从而实现灵活的配置管理。本文将详细讲解如何利用`@ConfigurationProperties`注解以及与`@...
在Spring框架中,高级应用涉及了众多复杂但强大的特性,其中注入嵌套Bean编程开发技术是提高代码组织和模块化的重要手段。嵌套Bean是指在一个Bean定义中引用或包含其他Bean,这种结构允许我们创建更复杂的对象图,...
2. **字符串注入**:在XML配置文件中,你可以直接指定字符串值,或者在Java配置类中使用`@Value`注解。例如,`@Value("张三")`可以将"张三"注入到一个`setName(String name)`的方法中。 3. **其他bean的注入**:...
在Spring中,我们通常使用`ApplicationContext`来获取bean,或者在有`@Autowired`注解的字段和方法上进行自动注入。如果`BeanUtil`没有正确地处理bean的获取,也可能导致问题的发生。 `system.properties`是系统...
总结来说,Spring Boot允许开发者轻松地在普通类中使用bean,通过Spring容器的强大功能来管理对象和依赖。通过理解并熟练运用上述知识点,可以更高效地开发Spring Boot应用。博客"17. Spring Boot普通类调用bean【从...