PicoContainer学习手册Author:Kongxx


 

转自:http://www.cnblogs.com/kongxx/archive/2005/08/12/213131.html

1.   PicoContainer介绍

1.1. 简介

PicoContainercodehaus开源组织的一个子项目。它是一个轻量级的DIDependency Injection)组件容器。

当前PicoContainer版本为V1.1,可以通过 http://picocontainer.codehaus.org/地址来访问并下载。

1.2. 功能特性

Ø         依赖注射模式的应用,他可以很好的管理组件与组件之间的依赖关联。像SpringFramework一样,它也支持Constructor Injection(Type3)Setter Injection(Type2)两种注入方式,但PicoContainer内部默认使用Constructor InjectionType3)注入方式;

Ø         PicoContainer是一种非侵入式的组件框架,用户的组件不需要实现任何特殊的API,甚至通常我们可以使用普通的POJO对象;

Ø         内建的生命周期管理,可以方便的管理组件的生命周期,通常我们的组件只需要实现Startable接口即可以实现由容器管理的生命周期管理;

Ø         非常灵活的设计,允许对核心功能进行任何形式的扩展;

Ø         是代码更简洁,提高代码的可测试性和可配置性;

2.   开始

2.1. 简介

以下是一个简单的小例子,用来说明PicoContainer的简单应用。它包括以下几个类(或接口):

类名

说明

example1.bean.User

一个普通的用户Bean

example1.dao.UserDAO.java

一个关于User的数据访问接口,定义了几个常见的用户操作。

example1.dao.UserDAOImpl.java

一个关于User的数据访问接口的实现类,具体实现比较简单。

example1.service.UserService.java

用户服务类,向上层服务提供接口。

example1.Test

测试类

       具体程序代码如下:

       User.java

package example1.bean;

 

public class User {

       private String userid ;

       private String username ;

       private String password ;

       public String getUserid() {

              return userid;

       }

       public void setUserid(String userid) {

              this.userid = userid;

       }

       public String getUsername() {

              return username;

       }

       public void setUsername(String username) {

              this.username = username;

       }

       public String getPassword() {

              return password;

       }

       public void setPassword(String password) {

              this.password = password;

       }    

}

       UserDAO.java

package example1.dao;

 

import java.util.List;

 

import example1.bean.User;

 

/**

 用户数据访问接口

 */

public interface UserDAO {

       /**

        根据用户名查询一个用户对象。

        * @param username 要查询的用户名

        * @return 返回查询到的用户对象,如果未查到返回null

        */

       public User findUser(String username) ;

      

       /**

        添加(持久化)一个用户。 

        * @param user 要添加的用户对象

        * @return 返回持久化后的用户对象

        */

       public User addUser(User user);

      

       /**

        更新一个持久化的用户对象

        * @param user 要更新的用户对象

        * @return 返回更新后的用户对象

        */

       public User updateUser(User user) ;

      

       /**

        删除一个持久化的用户对象。

        * @param user 要删除的用户对象

        * @return true-成功 false-失败

        */

       public boolean removeUser(User user) ;

      

       /**

        列出所有用户对象。

        * @return 返回所有用户对象

        */

       public List listUsers() ;

}

       UserDAOImpl.java

package example1.dao;

 

import java.util.ArrayList;

import java.util.List;

 

import example1.bean.User;

 

/**

 用户数据访问接口实现。

 只做测试使用

 */

public class UserDAOImpl implements UserDAO {

 

       public User findUser(String username) {

              System.out.println("find User " + username + " ...");

              if(username.equals("kongxx")) {

                     User user = new User();

                     user.setUserid("10000");

                     user.setUsername("kongxx");

                     user.setPassword("kongxx");

                     return user ;

              }

              return null;

       }

 

       public User addUser(User user) {

              System.out.println("add User ...");

              return null;

       }

 

       public User updateUser(User user) {

              System.out.println("update User ...");

              return null;

       }

 

       public boolean removeUser(User user) {

              System.out.println("remove User ...");

              return false;

       }

 

       public List listUsers() {

              System.out.println("list Users ...");

              return new ArrayList();        

       }

}

       UserService.java

package example1.service;

 

import java.util.List;

 

import example1.bean.User;

import example1.dao.UserDAO;

 

public class UserService {

      

       private UserDAO dao ;

      

       public UserService(UserDAO dao) {

              this.dao = dao ;

       }

      

       public User findUser(String username) {

              return this.dao.findUser(username);

       }

      

       public User addUser(User user) {

              return this.dao.addUser(user);

       }

      

       public User updateUser(User user)  {

              return this.dao.updateUser(user);

       }

      

       public boolean removeUser(User user) {

              return this.dao.removeUser(user);

       }

      

       public List listUsers()  {

              return this.dao.listUsers() ;

       }

}

Test.java

package example1;

 

import org.picocontainer.ComponentAdapter;

import org.picocontainer.MutablePicoContainer;

import org.picocontainer.defaults.DefaultPicoContainer;

 

import example1.bean.User;

import example1.dao.UserDAOImpl;

import example1.dao.UserDAOImpl2;

import example1.service.UserService;

 

 

public class Test {

      

       public static void main(String[] args) {