PicoContainer学习手册Author:Kongxx
转自:http://www.cnblogs.com/kongxx/archive/2005/08/12/213131.html
1. PicoContainer介绍
1.1. 简介
PicoContainer是codehaus开源组织的一个子项目。它是一个轻量级的DI(Dependency Injection)组件容器。
当前PicoContainer版本为V1.1,可以通过 http://picocontainer.codehaus.org/地址来访问并下载。
1.2. 功能特性
Ø 依赖注射模式的应用,他可以很好的管理组件与组件之间的依赖关联。像SpringFramework一样,它也支持Constructor Injection(Type3)和Setter Injection(Type2)两种注入方式,但PicoContainer内部默认使用Constructor Injection(Type3)注入方式;
Ø 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) { |