Programação Orientado Aspecto

15 respostas
H

Gostaria de saber se alguem já fez algum programa orientado a aspecto com Aspctj ?
Se existe algum exemplo de programa e quais as facilidades dessa metodologia ?
Pois estou lendo o Livro AspectJ e o que parece ele é bom na teoria gostaria de saber se alguem já utilizou isso na realidade no dia dia…

Obrigado

15 Respostas

henrique.lima

Olá Hamses, o aspectj é muito utilizado atualmente em diversos projetos (principalmente de grande porte) e os recursos da programação orientada a aspecto complementam algumas “limitações” da programação orientada a objetos e facilitam bastante no dia-a-dia do desenvolvimento. Entretanto, na minha opinião, para enxergar de maneira simples e prática estes recursos, você poderia utilizar algo mais simples como o spring AOP que, entre outras coisas, é um referência por ser muito fácil de utilizar além de possuir suporte ao AspectJ.

Você pode encontrar maiores informações na documentação

Bem, fica aí a dica e acredito que boa parte do que você procura com a programação orientada a aspecto pode ser feito com o spring aop.

Boa sorte!

davidbuzatto

Então você gostaria de saber sobre AOP?

nbluis

AOP já é largamente utilizado em projetos de médio e grande porte.

Mas como o henrique.lima falou, estude AspectJ mas também conheça as demais alternativas existentes.

H

Olá Henrique.
Obrigado pela resposta.
Gostaria de saber tambem se é possivel utilizar o spring em projetos de desktop,Pois tenho um sistema de transportadora e quero começar utilizar aspecto em algumas partes do sistema…

Obrigado

nbluis

Com certeza…

henrique.lima

Hamses:
Olá Henrique.
Obrigado pela resposta.
Gostaria de saber tambem se é possivel utilizar o spring em projetos de desktop,Pois tenho um sistema de transportadora e quero começar utilizar aspecto em algumas partes do sistema…

Obrigado

Hamses, é possível sim. Inclusive, além do aspecto é possível você utilizar um dos recursos mais fantásticos do spring, a injeção de dependências.

Boa sorte!

H

Obrigado pelas dicas
Alguem conhece um bom livro de spring,pois eu já tenho um de orientação a aspecto

Obrigado

henrique.lima

Spring in action second edition é uma ótima opção.

S

Meus amigos
estou tentando implementar exemplo utilizando o Spring.
porem estou com varias dificuldades.
nos exemplos esta acontecendo erros que nao consigo identificar. ja importei bibliotecas e td mais.
acredito que o erro esta acontecendo no config.xml, alguem pode me ajudar?


"http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<!--
    Document   : config.xml
    Created on : 13 de Fevereiro de 2010, 15:53
    Author     : Toshiba
    Description:
        Purpose of the document follows.
-->
<beans>

    <bean id = "gerenciadorArquivosTarget"
          class = "GerenciadorArquivos"/>


    <bean id = "logAdvice"
          class = "LogAdvice"/>


    <bean id = "gerenciadorArquivo"
          class = "org.springframework.aop.framework.ProxyFactoryBean">
        <property name = "interceptorNames"><list><value>notificacaoAdvice</value>
                                            <value>logAdvice</value></list></property>
        <property name = "target" ref = "gerenciadorArquivosTarget"/>
    </bean>
    
<!--
    <bean id = "gerenciadorArquivo"
          class = "GerenciadorArquivos"/>
-->
    <bean id="publicadorDeNoticiasBean"
          class ="PublicadorDeNoticias">
        <property name = "gerenciadorArquivos" ref = "gerenciadorArquivo"/>
    </bean>


    <bean id = "notificador"
          class = "Notificador" />


    <bean id = "notificacaoAdvice"
          class = "NotificacaoAdvice">
          <property name = "notificador" ref = "notificador"/>
    </bean>

</beans>

abaixo segue o erro que esta acontecendo...

[color=red]run:
24/02/2010 11:56:08 org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@a01335: display name [org.springframework.context.support.ClassPathXmlApplicationContext@a01335]; startup date [Wed Feb 24 11:56:08 BRT 2010]; root of context hierarchy
24/02/2010 11:56:09 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [config.xml]
24/02/2010 11:56:09 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@a01335]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1037c71
24/02/2010 11:56:09 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1037c71: defining beans [gerenciadorArquivosTarget,logAdvice,gerenciadorArquivo,publicadorDeNoticiasBean,notificador,notificacaoAdvice]; root of factory hierarchy
24/02/2010 11:56:09 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1037c71: defining beans [gerenciadorArquivosTarget,logAdvice,gerenciadorArquivo,publicadorDeNoticiasBean,notificador,notificacaoAdvice]; root of factory hierarchy
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'publicadorDeNoticiasBean' defined in class path resource [config.xml]: Cannot resolve reference to bean 'gerenciadorArquivo' while setting bean property 'gerenciadorArquivos'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gerenciadorArquivo': FactoryBean threw exception on object creation; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:274)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1274)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1042)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:485)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:455)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:169)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:170)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:413)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:735)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:369)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:122)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:66)
at PublicadorDeNoticias.main(PublicadorDeNoticias.java:49)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gerenciadorArquivo': FactoryBean threw exception on object creation; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type
at org.springframework.beans.factory.support.AbstractBeanFactory$3.run(AbstractBeanFactory.java:1310)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectFromFactoryBean(AbstractBeanFactory.java:1299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1272)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:206)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:170)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:268)
... 17 more
Caused by: java.lang.NoClassDefFoundError: org/objectweb/asm/Type
at net.sf.cglib.core.TypeUtils.parseType(TypeUtils.java:180)
at net.sf.cglib.core.KeyFactory.(KeyFactory.java:66)
at net.sf.cglib.proxy.Enhancer.(Enhancer.java:69)
at org.springframework.aop.framework.Cglib2AopProxy.createEnhancer(Cglib2AopProxy.java:225)
at org.springframework.aop.framework.Cglib2AopProxy.getProxy(Cglib2AopProxy.java:152)
at org.springframework.aop.framework.ProxyFactoryBean.getProxy(ProxyFactoryBean.java:351)
at org.springframework.aop.framework.ProxyFactoryBean.getSingletonInstance(ProxyFactoryBean.java:306)
at org.springframework.aop.framework.ProxyFactoryBean.getObject(ProxyFactoryBean.java:232)
at org.springframework.beans.factory.support.AbstractBeanFactory$3.run(AbstractBeanFactory.java:1304)
... 23 more
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 32 more
Java Result: 1[/color][color=green]
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)[/color]

Abracos t+

henrique.lima

Independente do xml o erro apresentado é referente a uma classe que não foi encontrada, no caso a classe é “org.objectweb.asm.Type”. Isto significa que está faltando um jar (no caso os jars do asm) que são as dependências pra rodar aplicações com o spring.

Pelo visto você ainda está usando a versão 2.x, aconselho abaixar o jar que possui no nome as palavras “no-dependencies” que, desta forma, todas as dependências já estarão inclusas. A versão 3.0 não tem essa versão “no-dependencies”. Se for usar spring 3.0, melhor usar o maven pra resolver as dependências.

Um segundo conselho é… Tente configurar um bean de cada vez e vai evoluindo aos poucos pra ir pegando o jeitão da coisa.

Boa sorte.

S

Henrique, estou utilizando a versao 2.5
eu ja tinha adicionado nas bilbiotecas o jar Spring Framework 2.5 - spring2.5.jar, nela contem os jar org.springframework.asm, org.springframework.asm.commons, e org.springframework.asm.signature.

Realmente nao tem a org.objectweb.asm.Type

Tentei procurar esta indicacao dos jar com “no-dependencies”, encontrei varias no link
http://static.springsource.org/downloads/nightly/milestone-download.php?project=BATCH

agora nao sei qual das versoes devo baixar…
vc pode me ajudar/orientar?

Obrigado pelo apoio.

henrique.lima

O link que você está procurando é de um sub-projeto do spring, SPRING-BATCH.

O link pro spring com todas as dependencias segue abaixo:

http://s3.amazonaws.com/dist.springframework.org/release/SPR/spring-framework-2.5.6.SEC01-with-dependencies.zip

Um detalhe que seria bem simples de você achar este mesmo jar caso fizesse o descrito no link abaixo:

Boa sorte!

midianet

Hamses:
Olá Henrique.
Obrigado pela resposta.
Gostaria de saber tambem se é possivel utilizar o spring em projetos de desktop,Pois tenho um sistema de transportadora e quero começar utilizar aspecto em algumas partes do sistema…

Obrigado

E possivel sim.

eu utilizo em alguns projetos,

midianet

Recomendo utilizar o spring também para trabalhar com aspecto, fica muito interessante
e o aspecto e montado em tempo de execução não compilação como no aspectJ o que no
caso o aspectcJ realmente deixa mais rápido.

midianet

Spring em ação eu aprendi muita coisa de spring com ele

Criado 9 de janeiro de 2008
Ultima resposta 11 de jan. de 2008
Respostas 15
Participantes 6