Inicializar o Spring

7 respostas
vcsmetallica

Salve galera!

Estou meio perdido no Spring aqui. O produto final da minha aplicação é um JAR.

Eu usei as anotaçoes @Repository(“agendaDAO”) no meus DAOs e a anotação @Autowired AgendaDAO agendaDAO;

Ate ai blza. so que estou acostumado com aplicaçoes web, onde quando vc sobe a sua aplicação, no web.xml esta configurado para subir o Spring junto, ai essas anotaçoes funciona as mil maravilhas.

Queria saber como que faço para subir o spring no meu jar sem usar os codigos abaixos:

ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(new String[] {"META-INF/applicationContext.xml"});
AgendaDAO agendaDAO = (AgendaDAO) appContext.getBean("agendaDAO");
List<Agenda> a = aq.agendas();

Abaixo o meu applicationContext caso precise acresentar alguma informação.

<?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:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">




    <tx:annotation-driven />

    <bean id="applicationContextProvider" class="br.com.ces.svias.infraestrutura.ApplicationContextProvider"></bean>

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location">
            <value>/META-INF/jdbc.properties</value>
        </property>
    </bean>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <bean id="sessionFactory" class="br.com.ces.svias.infraestrutura.AnnotationOptimizedSessionFactoryBean">
        <property name="basePackage">
            <value>br.com.ces.svias.modelo</value>
        </property>

        <property name="dataSource">
            <ref bean="dataSource" />
        </property>

        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            </props>
        </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    
    <context:annotation-config />
    <context:component-scan base-package="br.com.ces.svias.dao"></context:component-scan>

</beans>

Sei que parece uma pergunta besta, mas sempre usei spring em aplicações web.

Att

7 Respostas

vcsmetallica

Alguem!!!

fabiofalci

vcsmetallica:
Queria saber como que faço para subir o spring no meu jar sem usar os codigos abaixos:

ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(new String[] {"META-INF/applicationContext.xml"}); AgendaDAO agendaDAO = (AgendaDAO) appContext.getBean("agendaDAO"); List<Agenda> a = aq.agendas();

Pq você não quer usar esse código? Não está funcionando?

vcsmetallica

Uai!!!

Esta funcionando, so que eu achei que as anotaçoes ja faziam isso para mim, sem ser preciso eu usar appContext.getBean(“AlgumaCoisa”);

Eu pensava que era somente subir o spring que as anotações ja cuidavam do resto.

Entendeu a minha duvida?

Att

fabiofalci

O Spring cuida do restante, mas o início, o bootstrap, vc precisa disparar.

No caso de um servidor web, o próprio servidor faz isso pra ti olhando o web.xml.
Mas se for stand-alone, é preciso fazer, bem assim como você fez.

vcsmetallica

Certo, entao aquando eu subir a minha aplicação eu tenho que fazer um getBean para cada classe que eu for trabalhar?

atrt

fabiofalci

Isso depende do ciclo de vida da sua aplicação.
Já fiz sistemas desktop swing com spring. Então abria o JFrame principal e, a partir daqui, as telas eram todas montadas por DI.
Algo assim:

ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");  
SwingApplication application = (SwingApplication) appContext.getBean("application");  
application.setVisible(true);

No momento da inicialização, o SwingApplication monta a tela e todas as dependências com DI. A partir daqui o sistema fica na espara pelo usuário.
Agora, pode ser um processo com início, meio e fim. Você chama um método .start, ele processa e então finaliza.

vcsmetallica

entendi.

Vou fazer aqui. estou testando de outro jeito aqui.

Se der certo eu posto aqui o jeito que eu fiz e deu certo.

att

Criado 21 de julho de 2011
Ultima resposta 22 de jul. de 2011
Respostas 7
Participantes 2