ebook img

Spring e AngularJS - Dipartimento di Matematica - Università degli PDF

14 Pages·2014·0.5 MB·Italian
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Spring e AngularJS - Dipartimento di Matematica - Università degli

INTRODUZIONE  Un po’ di storia … Java beans EJB 1.0 EJB 3.0 • Riusabilità e • Aggiunge ai • Implementazione composizionalità beans componenti semplificata • Troppo semplici server-side • Deployment Transazionalità? • Servizi accedibili semplificato DEPENDENCY INJECTION E Sicurezza? da remoto (annotazioni) • Tecnologia molto MVC: SPRING E ANGULARJS complessa INGEGNERIA DEL SOFTWARE 1996 1998 2006 Università degli Studi di Padova Dipartimento di Matematica Corso di Laurea in Informatica, A.A. 2013 – 2014 2 [email protected] Ingegneria del software mod. B Riccardo Cardin INTRODUZIONE INTRODUZIONE  Spring  Spring “Spring is a lightweight inversion of control and aspect oriented  Lightweight container framework” Non è intrusivo, gli oggetti sviluppati non dipendono da classi del framework  Framework opensource creato per ridurre la complessità dello sviluppo di applicazioni enterprise  Framework/Container Gestisce il ciclo di vita e la configurazione degli oggetti  Non è limitato alla componente server dell’applicazione. La configurazione utilizza XML o annotazioni. Lo sviluppatore può concentrarsi sulla logica di business  Utilizza componenti semplici (bean)  IoC e DI  Permette di ridurre l’accoppiamento 3 Il container si fa carico di “iniettare” le dipendenze degli oggetti 4 a runtime Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin SPRING: CONCETTI SPRING: CONCETTI  Plan Old Java Object (POJO)  Dependency Injection pattern " We wondered why people were so against using regular objects in their  Separa il comportamento di una componente dalla systems and concluded that it was because simple objects lacked a fancy risoluzione delle sue dipendenze n ame. So we gave them one, and it's caught on very nicely."  Inversion of Control (principio di Hollywood)  Minimizza il livello di accoppiamento  Il ciclo di vita degli oggetti è gestito da una entità esterna (container)  La componente dichiara unicamente le sue dipendenze  Dependency Injection  Le dipendenze di un oggetto vengono “iniettate”  Un framework DI risolve a runtime le dipendenze nell’istanza automaticamente e a runtime dichiarate Utilizzo costruttori e metodi setter 5 Utilizzo costruttori e metodi setter dei POJO 6 Perdita dell’incapsulamento Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin DEPENDENCY INJECTION DEPENDENCY INJECTION  Poor initialization  Classic inizialization  Utilizzo del design pattern factory … migliorando un po’ … 7 8 Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin DEPENDENCY INJECTION SPRING: ARCHITETTURA  Spring injection  Architettura del framework  Costruzione e risoluzione delle dipendenze ...e si vuole cambiare l’implementazione di B... 9 10 Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin SPRING: ARCHITETTURA SPRING: COMPONENTI  Core container  Configurazione XML  Implementa l’IoC attraverso la BeanFactory  org.springframework.beans.factory.BeanFactory Wiring bean Implementazione del pattern factory, costruisce e risolve le dipendenze  Application context  org.springframework.context.ApplicationContext  Fornisce servizi come i18n, JNDI, EJB integration Costruita sulla bean factory, fornisce ulteriori funzionalità AOP, transazionalità, ...  Modulo JDBC e DAO  Gestione degli accessi al datasource ApplicationContext ctx = new ClassPathXmlApplicationContext(  Evita la gestione delle connessioni "com/springinaction/springidol/filename.xml"); […]  Modulo MVC 11 MyBean bean = (MyBean) ctx.getBean(“beanid”); 12  Separa la logica di controllo da quella di business Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin SPRING: COMPONENTI SPRING: COMPONENTI  Configurazione XML  Configurazione XML  Dependency injection attraverso proprietà  Dependency injection attraverso costruttori Utilizzo metodi setter e getter <?xml version="1.0" encoding="UTF-8"?> <!DOCT YPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" <?xml version="1.0" encoding="UTF-8"?> "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" </beans> "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <be an id="A" class="nomeClasseA" > </beans> <bean id="A" class="nomeClasseA" > <constructor-arg value="15"/> <constructor-arg ref="B"/> <property name="nome1" ref="B"/> </bean > <property name="nome2" value="una stringa"/> <property name="nome3" value="37"/> <bean id="B" class="nomeClasseB" /> </bean > </beans> <bean id="B" class="nomeClasseB" />  DI attraverso factory methods, init e destroy </beans> 13 14 methods... Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin SPRING: COMPONENTI SPRING: COMPONENTI  Wiring utilizzando annotazioni  Wiring utilizzando annotazioni  Permette una gestione migliore della configurazione  @Inject/@Autowired in progetti grandi Ricerca per tipo il bean della proprietà  Introduce una dipendenza da framework esterni Si utilizza su costruttori, proprietà, ... @Autowired Il bean non deve essere ambiguo @Inject, annotazione JSR-330 Disambiguazione tramite @Named per l’ID @Resource, annotazione JSR-250 @Inject private Instrument instrument; <?xml version="1.0" encoding="UTF-8"?> <!DO CTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" @Inject "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> @Named("guitar") private Instrument instrument2; </be ans> < context:annotation-config/>  Autodiscovery <context:component-scan base-package="org.example"/> 15 16 [...]  @Component, @Controller, @Service, ... Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin SPRING SPRING: MVC  Esempio  Componente per lo sviluppo di applicazione web  Interfacce e dependency injection  Model Layer della logica di business del sistema  View Layer di visualizzazione/presentazione dati Utilizza la tecnologia JSP e Tag library  Control Layer che gestisce/controlla flussi e comunicazioni Dispatcher delle richieste (Front controller) Controller che implementano la logica applicativa  Integrazione con Spring IoC container 17 Utilizzo del DI pattern 18 Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin FRONT CONTROLLER PATTERN FRONT CONTROLLER PATTERN  Architettura  Il controller è l’unico punto di accesso  Gestisce le richieste in tutti gli aspetti 19 20 Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin SPRING: MVC SPRING: MVC  Architettura e componenti  org.springframework.web.servlet.DispatcherServlet  Front controller del framework Spring  Da configurare nel file web.xml <servlet> <servlet-name>disp</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> Default servlet, non <s ervlet-mapping> preclude alcun formato <servlet-name>disp</servlet-name> <url-pattern>/</url-pattern> nella risposta, ma gestisce </servlet-mapping> anche i contenuti statici.  Configurata via XML (Web Application Context) 21 22 <servlet-name>-servlet.xml Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin SPRING: MVC SPRING: MVC  Handler mappings  Controller e annotazioni  Associa la servlet (gli URL) con i controller  Racchiudono la logica dell’applicazione web  BeanNameUrlHandlerMapping  DefaultAnnotationHandlerMapping <be ans> Mapping delle richieste utilizzando @RequestMapping <bean id="beanNameUrlMapping" class="org.spr ingframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> Sfrutta l’autowiring e l’autodiscovering dei bean <bean name="/listEmployee.htm" class="controllers.ListEmployeeController"> POJO, più semplice da verificare (i.e. Mockito) …. </bean> http://localhost:8080/ExampleSpring/list <beans>  SimpleUrlHandlerMapping Employee.htm <bean id="defaultHandlerMapping" cl ass="org.springframework.web.portlet.mvc.annotation. <bean id ="handlerMapping" DefaultAnnotationHandlerMapping" /> class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <mv c:annotation-driven/> <value> <context:component-scanbase- /ex/view*.htm=helpController package="com.habuma.spitter.mvc"/> /**/help.htm=helpController </value> 23 [...] 24 </property> </bean> </bean> Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin SPRING: MVC SPRING: MVC  Controller e annotazioni  @RequestParam Dichiarazione del Controller  Permette il recupero dei parametri da una richiesta @Controller public ClassHomeController { @RequestMapping(value="/spittles",method=GET) pub lic String listSpittlesForSpitter( private SpitterService spitterService; @RequestParam("spitter") String username, Model model) { Injection dell’applicazion logic @Inject Spitterspitter=spitterService.getSpitter(username); public HomeController(SpitterServicespitterService) { model.addAttribute(spitter); this.spitterService = spitterService; model.addAttribute( } spitterService.getSpittlesForSpitter(username)); Dichiarazione URL gestiti return"spittles/list"; @RequestMapping({"/","/home"}) } public String showHomePage(Map<String,Object> model) {  org.springframework.ui.Model model.put("spittles",spitterService.getRecentSpittles( DEFAULT_SPITTLES_PER_PAGE));  Mappa di stringhe – oggetti return "home"; Modello ritornato alla view }  Convention over configuration (CoC) } 25  Da utilizzare con Controller annotati 26 Scelta della prossima view Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin SPRING: MVC SPRING: MVC  Componente view  Componente view InternalResourceViewResolver  Scelte da un risolutore (resolver) secondo il [...] ModelAndView <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> XmlViewResolver Usa un file di configurazione xml per la </bean> risoluzione delle view [...] XmlViewResolver ResourceBundleViewResolver Usa un resource bundle (una <bean class="org.springframework.web.servlet.view.XmlViewResolver"> serie di file con estensione .properties) per risolvere le view <property name="location"> <value>/WEB-INF/spring-views.xml</value> </property> UrlBasedViewResolver Esegue una risoluzione diretta del </bean> nome simbolico della view in una URL <beans xmlns=“…”> <bean id="WelcomePage“ class="org.springframework.web.servlet.view.JstlView"> InternalResourceViewResolver Il nome logico viene <property name="url" value="/WEB-INF/pages/WelcomePage.jsp" /> utilizzato direttamente come nome della view. 27 </bean> 28 </beans> Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin SPRING: PERSISTENZA TEMPLATE METHOD  Fornisce supporto uniforme verso lo strato di  Struttura persistenza Definisce le operazione astratte primitive. Definisce lo scheletro dell’algoritmo  JDBC, ORM, …  Versione particolare del template method pattern Nessun metodo astratto Le firme dei metodi hanno come parametri interfacce che vengono risolte a runtime PreparedStatementCreator CallableStatementCreator RowCallbackHandler Implementa le operazioni primitive RowMapper fornendo i passi concreti all’algoritmo ... 29 30 Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin SPRING: PERSISTENZA SPRING: PERSISTENZA  Supporto JDBC  Supporto JDBC  org.springframework.jdbc.core.JdbcTemplate  Accesso al JDBC layer in I/O Recupero primitivo Gestione trasparente delle connessioni int countOfActorsNamedJoe = Incapsulamento API JDBC (query, ResultSet, … ) this.jdbcTemplate.queryForInt("select count(0) from Cattura le eccezioni JDBC e le trasforma in eccezioni più t_actors where first_name = ?", new Object[]{"Joe"}); comunicative Recupero oggetti public class ActorRowMapper implements RowMapper {  Permette di costruire DAO utilizzando IoC public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Actor actor = new Actor(); public class JdbcCorporateEventDao implements CorporateEventDao { actor.setFirstName(rs.getString("first_name")); actor.setSurname(rs.getString("surname")); private JdbcTemplate jdbcTemplate; return actor; public void setDataSource(DataSource dataSource) { } this.jdbcTemplate = new JdbcTemplate(dataSource); ... } Actor actor = (Actor) this.jdbcTemplate.queryForObject( } 31 "select first_name, surname from t_actor where id = ?", 32 new Object[]{new Long(1212)}, new ActorRowMapper() ); Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin STRUMENTI ORM SPRING: PERSISTENZA  Definizione  Hibernate  Mappa una tabella su un oggetto  Framework in grado di mappare proprietà di un oggetto con colonne di un DB Studenti public class Studente { private Integer id; Persistenza garantita attraverso gli oggetti ID: NUMBER private String firstName;  Offrono specifici linguaggi di interrogazione private String lastName; private Set courses;  Garantiscono sofisticate funzionalità FIRST_NAME: ... VARCHAR H8 public String getFirstName() Lazy loading { return firstName; } Eager fetching LAST_NAME: public void setFirstName(String firstName) { Caching VARCHAR this.firstName = firstName; Cascading … } ... …  JPA, Java Persistence API 33 34 Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin SPRING: PERSISTENZA SPRING: PERSISTENZA  Hibernate  Hibernate  H8 Session Factory è il gestore delle connessioni fra  org.springframework.orm.hibernate3.HibernateTemplate oggetti Java e il database Fornisce l'accesso alla sessione di H8 Necessità di datasource … inietiamolo con Spring! Assicura che la session stessa sia appropriatamente aperta e chiusa <beans> Fornisce le funzionalità standard di accesso ai dati <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" > public Col lection loadAziende(final String category) <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/> throws DataAcces sException { </bean> HibernateTemplate ht = new HibernateTemplate(this.sessionFactory); <bean id="mySessionFactory" return (Collecti on) ht.execute(new HibernateCallback() { class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> publ ic Object doInHibernate(Session session) throws HibernateException { <property name="dataSource" ref="myDataSource"/> Query query = session.createQuery("from spring-samples.Aziende aziende"); <property name="mappingResources"> return query. list(); <list> } }); <value>hibernate.hbm.xml</value> } </list> </property> ... 35 L’implementazione dell’interfaccia HibernateCallback 36 </beans> permette l’interfacciamento Spring – H8 Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin SPRING: PERSISTENZA SPRING  Hibernate  Ci sarebbero ancora molti aspetti da trattare …  È possibile configurare HibernateTemplate direttamente con una session factory  Gestione delle transazioni Non occorre più implementare HiberateCallback  Aspect Oriented Programming (AOP) <bean id="hibernateTemplate“  Remoting class="org.springframework.orm.hibernate3.HibernateTemplate">  Spring Roo <property name="sessionFactory"> <ref bean="sessionFactory"/>  Spring Social </property> </bean>  Spring Web Service  Spring.io public void updateStudent(Student student) { hibernateTemplate.update(student);  ... } public List findStudentsByLastName(String lastName) { return hibernateTemplate.find("from Student student " + 37  … ma non c’è più tempo!!! 38 "where student.lastName = ?", lastName); } Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin ANGULARJS ANGULARJS «whatever works for you»  Javascript framework  Model – View – Whatever  Client-side view controller - modelview model  Model-View-Whatever MVC per alcuni aspetti (controller)… Templates w) Services …MVVM per altri (two-way data binding) peVie coel Controllers sd  Utilizza HTML come linguaggio di templating $o Views M Model Non richiede operazioni di DOM refresh ( Controlla attivamente le azioni utente, eventi del browser Realizza le viste Espone i metodi Modello dati  Dependence injection utilizzando le dell’application logic e e servizi di proiezioni del realizza il two-way data business 39 40  Fornisce ottimi strumenti di test modello binding logic Ingegneria del software mod. B Riccardo Cardin Ingegneria del software mod. B Riccardo Cardin

Description:
MVC: SPRING E ANGULARJS. INGEGNERIA DEL SOFTWARE. Università degli Studi di .. http://docs.angularjs.org/guide/databinding. ○ AngularJS controller.
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.