碰到了一个非常奇怪的问题,现例如下:
写了一个项目,底层是用SSM框架搭建的,本来没什么问题,但是用autowired注解注入的时候发现对象是单利的,而我想得到的对象是多例的,于是在spring里这样进行了配置
对,我觉得这样配之后就是多例的了,然后用autowired进行对象注入
这里我用注解的方式对对象进行注入,然后调用了3次select这个方法,然后调用输出语句打印base对象的内存地址,结果却发现地址是一致的,这让我觉得很惊奇,接下来是spring的配置
spring_mvc的配置
web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--spring监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 处理POST提交乱码问题 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--默认找的是web-info下的springmvc-xml配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--Tomcat启动就实例化-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--注意,/*连jsp页面都会拦截,会全部拦截,不建议使用-->
<!--强烈建议使用/,不会拦截静态页面-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
想了半天没想明白是那里错了问题,scope失效了还是说spring_mvc里的对象只能是单例的?求好心人解答,不胜感激
补充:看到解答里有人说设置类为多例的,于是打上了注解试了下,我是这么配的
然后我在BaseDict类里配置了多例注解
之后通过打印BaseDictExample的内存地址发现地址仍然是一样的,我甚至把controller都打上注解了,类似于这样
仍然不好使,对象的内存地址一致,,,该如何解决?
不知你的
@Autowiered
在那个类里用的, 如果是在controller
里, 关键在于controller是单例的, 里有的所有fields自然也都是单例的, 所以你那个bean怎么设都不会有啥影响.EDITED
如果一定要做成多例的,可以参考
4.5.4.5 Scoped beans as dependencies
需要在配置beans时加上作用域代理
https://stackoverflow.com/que...