解决方案 »

  1.   

    不是特别理解你的意思,"其他包中的类"想要用注入的bean,就注入成员属性呗,或者使用类似Util的东西,按名称直接获取bean。你想要的效果是什么呢?或者你碰到的问题具体是什么样子的?
      

  2.   

    我也没看懂,正常获取加载bean的两种方式,一种是在xml中配置好要加载的bean对象的路径,另一种是在xml中配置好扫描的包路径,然后在该包下的类中写上component、service等注释
      

  3.   


    这么说吧
    tomcat配置了加载的bean
    <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/serviceBeans.xml,  /WEB-INF/classes/beans.xml</param-value>
        </context-param>
    等tomcat启动了之后,这些bean都存在了,但是问题是我没有什么继承自servlet的类,项目里没有用到servlet这些东西。
    在普通类比如,我自己写个A类,如何获取这些已经存在的bean。
    如果这样new ClassPathXmlApplicationContext( "beans.xml");这些bean就是另外一些bean了。
    怎么弄?还有spring的bean是单例的,单例的范围是什么,是跨线程的吗?
      

  4.   

    WEB启动的通常这么用.
    context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
    context.getBean("xxx");
    否则就自己实现BeanFactoryAware接口,Spring能自动注入Factory, 并在set方法中将该Factory放到静态变量里共享.
      

  5.   


    这么说吧
    tomcat配置了加载的bean

    <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/serviceBeans.xml,  /WEB-INF/classes/beans.xml</param-value>
        </context-param>等tomcat启动了之后,这些bean都存在了,但是问题是我没有什么继承自servlet的类,项目里没有用到servlet这些东西。
    在普通类比如,我自己写个A类,如何获取这些已经存在的bean。
    如果这样new ClassPathXmlApplicationContext( "beans.xml");
    这些bean就是另外一些bean了。
    怎么弄?还有spring的bean是单例的,单例的范围是什么,是跨线程的吗? 
      

  6.   

    那就定义一个单例对象放到核心包中, 从单例中获取factory引用.
      

  7.   

    直接改spring的包?这不太好吧。public class BeanFetcher implements ApplicationContextAware{
        private static ApplicationContext ac;
        public static Object fetchBean(String beanName) {
            try {
                if (ac == null) {
                    return null;
                }
                return BeanFetcher.ac.getBean(beanName);
            } catch (BeansException e) {
                return null;
            }   
        }
        private BeanFetcher() {};
        @Override
        public void setApplicationContext(ApplicationContext ac) throws BeansException {
            BeanFetcher.ac = ac;
            if (ac == null) {
                System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@but the ac is null");
            }
            System.out.println("77777777777777777777777777777"+ac.getDisplayName());
            System.out.println("Has take the ac");
        }
        
        
        
    }
    这个类在tomcat装载的时候ac是有值的。
    但是在另外一个类里写个main函数访问,这个ac就没值了。
    这是什么情况,就算不在一个线程里面,static不应该是线程共享的吗?
      

  8.   

    main函数??
    这不是启动另一个虚拟机了么.
      

  9.   

    你把你写的这个类纳入spring的管理就行了呀,需要哪些bean,写上get,set方法,会帮助你注入的
      

  10.   

    springutil,具体思路是:读取web.xml   ,读取到srping的配置文件路径,然后使用srping api加载。。不需要启动web服务器就可以拿到bean