Spring DI with different styles

Spring as a dependency injection (DI) framework allows us to define our application components' dependency tree in three different ways: XML Annotation Java Config I've written a simple app, bookstore, with the three styles and they're available in the following repository. You can take a look and see how each style would look like. It also has a version that uses no Spring beans for comparison. https://github.com/ryu1kn/spring--working-with-beans Different styles have different pros/cons. Spring lets you mix the styles; so you can change it as you go. Here is my observations on each style. XML-based configuration Pros Weak/loose coupling with Spring framework in your app code. Good for keeping the option of removing Spring later Class dependency information is centralised. Fine-grained control on the dependency definition. Changing only the dependency information doesn't require the recompilation of your app code. Cons Unless you have a good IDE

Use SWI-Prolog's package manager

SWI-Prolog has its own package manager (prolog_pack). Available packages are listed here:
I was looking for a way to write lambda expressions in Prolog and found lambda pack on that list. To install/use the package, I rebuilt my swi-prolog to have archive.pl availbale.
  1. Install libarchive-devel (I use openSUSE with zypper, change the command according to your environment)
    $ sudo zypper install libarchive-devel
    
  2. Fetch the git repository (Or get the source from the official page)
    $ git clone git://www.swi-prolog.org/home/pl/git/pl.git
    
  3. Follow the instructions in the repository
    1. To download configuration files, submodules and documentations. Do prepare first.
      $ cd pl
      $ ./prepare
      
    2. configure, make and make_install in the src directory
      $ cd src
      $ ./configure
      $ make
      $ make install
      
    3. configure, make and make_install in the packages directory
      $ cd ../packages
      $ ./configure
      $ make
      $ make install
      
      Make sure that after you do configure, you have HAVE_ARCHIVE_H 1 in config.h
      $ grep 'HAVE_ARCHIVE_H' config.h
      #define HAVE_ARCHIVE_H 1
      
  4. That's it. Now you can start swi-prolog and install packages.
    $ swipl
    Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 6.4.1-98-g56aab30)
    Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam
    SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
    and you are welcome to redistribute it under certain conditions.
    Please visit http://www.swi-prolog.org for details.
    
    For help, use ?- help(Topic). or ?- apropos(Word).
    
    ?- pack_install(lambda).
    
    After you install the package, you just declare to use it.
    ?- use_module(library(lambda)).
    
    ?- maplist(\X^(X>3), [1]).
    false.
    
    ?- maplist(\X^(X>3), [4]).
    true.
    

Install SWI-Prolog with libarchive on Mac

Installing SWI-Prolog is even easier on Mac OS X if you're using homebrew. But you need to manually add libarchive to its dependencies if you want to use the package manager with the help of archive.pl.
  1. Edit the formula for swi-prolog
    1. Open the formula
      $ brew edit swi-prolog
      
    2. Add libarchive as its dependency
      require 'formula'
      
      class SwiProlog < Formula
      
        ...
      
        depends_on 'libarchive'       # add this line
        depends_on 'readline'
        depends_on 'gmp'
      
  2. Install SWI-Prolog
    $ brew install swi-prolog
    
  3. That's it. Now you can move on to 4 to install packages.

Comments

Popular posts from this blog

Use Blogger API from its Java client

Spring DI with different styles

Leverage shell commands to quickly edit text on Visual Studio Code