Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> aop in spring 
V
    Опции темы
Eugene128
Дата 12.5.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 2.9.2007

Репутация: нет
Всего: нет



Эхх, два вопроса за день.. 
Хочу использовать аоп в спринге... Но чего то ничего не получается... 
вот мой applicationContext:
Код

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-// SPRING/DTD BEAN//EN" "http://www.springframework.orgs/dtd/spring-beans.dtd">

<beans>
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName">
            <value>oracle.jdbc.driver.OracleDriver</value>
        </property>
        <property name="url">
            <value>jdbc:oracle:thin:@127.0.0.1:1521:ORCL</value>
        </property>
        <property name="username">
            <value>USER</value>
        </property>
        <property name="password">
            <value>USER</value>
        </property>
    </bean>

    <bean id="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="properties">
            <props>
                <!-- <prop key="hibernate.hbm2ddl.auto">create</prop> -->
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.c3p0.minPoolSize">5</prop>
                <prop key="hibernate.c3p0.maxPoolSize">20</prop>
            </props>
        </property>
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref local="dataSource"/>
        </property>
    
        <property name="hibernateProperties">
            <ref bean="hibernateProperties"/>
        </property>
    
        <property name="mappingResources">
            <list>
                <value>phonebook/dao/phonebook.hbm.xml</value>
            </list>
        </property>
    </bean>
    
    <bean id="phonebookDataProvider" class="phonebook.dao.PhonebookDataProvider">
        <property name="pbDao">
            <ref local="phonebookDAO"/>
        </property>
    </bean>

    <bean id="phonebookDAO" class="phonebook.dao.PhonebookDAO">
        <property name="sessionFactory">
            <ref local="sessionFactory"/>
        </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
    </bean>
    
    <bean id="dbAfterTracer" class="phonebook.aop.AfterDBAction"/>
        
    <bean id="afterMakingDBAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
        <property name="advice">
            <ref local="dbAfterTracer"/>
        </property>
        <property name="pattern">
            <value>*</value>
        </property>
    </bean>
        
    <bean id="phonebook" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="proxyInterfaces">
            <list>
                <value>phonebook.dao.IPhonebookDataProvider</value>
            </list>
        </property> 
        
        <property name="interceptorNames">
            <list>
                <value>afterMakingDBAdvisor</value>
            </list>
        </property>
        
        <property name="target">
            <ref bean="phonebookDataProvider"/>
        </property>
    </bean>

</beans>


И еще:
Код

package phonebook.aop;

import org.springframework.aop.AfterReturningAdvice;
import org.apache.log4j.Logger;

public class AfterDBAction implements AfterReturningAdvice{
    
    public AfterDBAction(){
        System.out.println("after db action created !!!");
    }
    
    public void afterReturning(Object obj, java.lang.reflect.Method method, Object[] obj2, Object obj3) throws Throwable{
        String str = "Был вызван метод "+method.getName() + " с параметрами ";
        for(int i = 0; i < obj2.length; i++){
            str+=obj2[i]+" ";
        }
        str += "у объекта "+obj.getClass().getName(); 
        
        System.out.println("!!!!!!: "+str);
    }
}


package phonebook.dao;

import java.util.List;

public interface IPhonebookDataProvider {
    public List getPhonebookEntries() throws Exception;
    public PhonebookEntry getPhonebookEntry(int entryID, int rowID) throws Exception;
    public int addEntry(PhonebookEntry pe) throws Exception;
}


package phonebook.dao;

import  java.util.List;

public class PhonebookDataProvider implements IPhonebookDataProvider{
    private IPhonebookDAO pbDao;
    
    public PhonebookDataProvider(){}
    
    public void setPbDao(IPhonebookDAO pbDao){
        this.pbDao = pbDao;
    }
    
    public List getPhonebookEntries() throws Exception{
        return pbDao.getPhonebookEntries();
    }
    
    public PhonebookEntry getPhonebookEntry(int entryID, int rowID) throws Exception{
        return pbDao.getPhonebookEntry(Integer.valueOf(entryID), Integer.valueOf(rowID));
    }
    
    public int addEntry(PhonebookEntry pe) throws Exception{
        return pbDao.addPhonebookEntry(pe);
    }
}



Вот "after db action created !!!" появляется в консольке во время развертывания... А дальше... ничего непишет ни в консольке, ни в файлах логирования томката, нигде.... (((( не понимаю почему ((((


PM MAIL   Вверх
Ivan Kolesnikov
Дата 13.5.2008, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 9.3.2005
Где: г. Новокузнецк

Репутация: 1
Всего: 6



RegexpMethodPointcutAdvisor должен в качестве pattern принимать регулярное выражение, ты указал * - как я понимаю ты хотел сказать, что для всех методов, правильный regexp в таком случае будет ".*" (без кавычек), "." - означает любой символ, "*" - ноль и более число раз.
--------------------
PM MAIL ICQ   Вверх
Eugene128
Дата 13.5.2008, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 2.9.2007

Репутация: нет
Всего: нет



Исправил на .* Но все по прежнему -  создается но не применяется к методам. (
PM MAIL   Вверх
Kangaroo
Дата 13.5.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Eugene128
что ж ты самого главного не показал - как и где ты используешь его  smile Наверное, у тебя неправильно указан бин, который ты используешь. Он должен ссылаться на phonebook бин.


--------------------
Lost....
PM MAIL MSN   Вверх
Eugene128
Дата 13.5.2008, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 2.9.2007

Репутация: нет
Всего: нет



А что значит "неправильно указал бин"? Я думал надо создать класс - аспект (первый класс во втором листинге). А потом в аппликейшенКонтексте указать к каким методам какого интерфейса его применять (proxyInterfaces) и к какому бину-реализации данного интерфейса (target)? Это вроде я написал.....
PM MAIL   Вверх
Kangaroo
Дата 14.5.2008, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Eugene128, ты прописываешь:
Код

<bean id="phonebook" class="org.springframework.aop.framework.ProxyFactoryBean">
...
</bean>


А потом там, где у тебя переменная с твоим интерфейсом - устанавливаешь в нее phonebook бин.



--------------------
Lost....
PM MAIL MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0819 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.