Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Не получается инициализировать поле в Spring'e


Автор: Royan 20.7.2009, 18:56
Хочу инициализировать поле map с помощью Spring'а но при этом избежать вызова getBean() Подскажите, где я не прав

Код

package test;

import org.jgroups.blocks.PartitionedHashMap;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class JGroupsTest {

    private  PartitionedHashMap<String, String> map;

    public PartitionedHashMap<String, String> getMap() {
        return map;
    }

    public void setMap(PartitionedHashMap<String, String> map) {
        this.map = map;
    }

    public static void main(String[] args) {
        XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource(
                "context.xml"));

        new JGroupsTest().test();
    }

    public void test() {
        map.put("name", "Bela", 0); // Здесь вылетает NullPointerException
    }

}


Context.xml:

Код

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
       
       
    <bean id="memcache" class="org.jgroups.blocks.PartitionedHashMap">
        <constructor-arg value="C:\JGroups\udp.xml"/>
        <constructor-arg value="demo-cluster"/>
    </bean>
    
    <bean id="jgroupsbean" class="test.JGroupsTest"
        p:map-ref="memcache"/>
</beans>



Выхлоп:

Код

Exception in thread "main" java.lang.NullPointerException
    at test.JGroupsTest.test(JGroupsTest.java:28)
    at test.JGroupsTest.main(JGroupsTest.java:24)

Автор: MisterCleric 21.7.2009, 00:07
А вот эта context.xml как раз этот показанный XML? Если да, то проблема в том. что ты хочешь проинджектить (p:map-ref="memcache") не spring-bean (это как раз new JGroupsTest()) в том месте, где у тебя даже его контейнер не поднят. В общем что бы провести такой тест, как в примере, нужно сначала поднять spring-context, а уж потом из него позвать бин: 
Код

JGroupsTest test = (JGroupsTest) beanFactory.getBean("jgroupsbean");
test.test();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)