PicoContainer系列之基本介绍

  PicoContainer是非常轻量级的Ioc容器,提供依赖注入和对象生命周期管理的功能,纯粹的小而美的Ioc容器。而Spring是Ioc+,提供如AOP等其他功能,是大而全的框架,不只是Ioc容器。
  官网地址:http://picocontainer.com/

Bean模式(Behaviors)

  1. Caching:单例模式;
  2. Implementation Hiding:只能使用抽象类,不允许向下转换为实现类;
  3. Thread Safety:多线程安全模式;
  4. Interception:拦截器模式,对象方法调用前后进行拦截;

详见:http://picocontainer.com/behaviors.html

注入类型

  支持各种方式的注入,常见的就是构造函数注入、setter方法注入以及注解注入。
这里写图片描述

生命周期Lifecycle

  1. StartableLifecycleStrategy:需要bean实现Startable 接口,容器启动时自动调用bean的start接口;容器关闭时调用其stop方法。
  2. ReflectionLifecycleStrategy:容器启动和停止时,会通过反射调用bean的start/stop/dispose方法;
  3. JavaEE5LifecycleStrategy:容器启动和停止时,会根据注解调用bean的start/stop/dispose方法;
  4. 自定义

代码示例

<dependency>
  <groupId>org.picocontainer</groupId>
  <artifactId>picocontainer</artifactId>
  <version>2.15</version>
</dependency>
import org.picocontainer.MutablePicoContainer;
import org.picocontainer.PicoBuilder;
import org.picocontainer.Startable;

public class PicoContainerTest {
    public static void main(String[] args) {
        MutablePicoContainer container = new PicoBuilder().withLocking().withCaching().withLifecycle().build();
        container.addComponent("k1", TestClass1.class);
        container.addComponent("k2", TestClass2.class);
        container.start();
        TestClass1 c1 = (TestClass1) container.getComponent("k1");
        c1.test();
        TestClass2 c2 = (TestClass2) container.getComponent("k2");
        c2.test();
        container.stop();
    }

    public static class TestClass1 implements Startable {

        @Override
        public void start() {
            System.out.println(TestClass1.class.getSimpleName() + " start");
        }

        @Override
        public void stop() {
            System.out.println(TestClass1.class.getSimpleName() + " stop");
        }

        public void test() {
            System.out.println(TestClass1.class.getSimpleName() + " test");
        }
    }

    public static class TestClass2 implements Startable {

        @Override
        public void start() {
            System.out.println(TestClass2.class.getSimpleName() + " start");
        }

        @Override
        public void stop() {
            System.out.println(TestClass2.class.getSimpleName() + " stop");
        }

        public void test() {
            System.out.println(TestClass2.class.getSimpleName() + " test");
        }
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值