Plexus,Spring之外的IoC容器
来源:互联网 发布:ubuntu不允许root ssh 编辑:程序博客网 时间:2024/05/06 19:38
Plexus是什么?它是一个IoC容器,由codehaus在管理的一个开源项目。和Spring框架不同,它并不是一个完整的,拥有各种组件的大型框架,仅仅是一个纯粹的IoC容器。本文讲解Plexus的初步使用方法。
Plexus和Maven的开发者是同一群人,可以想见Plexus和Maven的紧密关系了。由于在Maven刚刚诞生的时候,Spring还不成熟,所以Maven的开发者决定使用自己维护的IoC容器Plexus。而由于Plexus的文档比较烂,根据社区的呼声,下一版本的Maven 3则很可能使用比较成熟的Guice框架来取代Plexus,但更换底层框架毕竟不是一件轻松的事情,所以现阶段学习了解Plexus还是很有必要的。并且Plexus目前并未停止开发,因为它的未来还未可知。除了Maven以外,WebWork(已经与Struts合并)在底层也采用了Pleuxs。
为了学习使用Plexus,首先我们还是用Maven创建一个干净的java项目:
1
mvn archetype:create /
2
-DarchetypeGroupId=org.apache.maven.archetypes /
3
-DgroupId=demo /
4
-DartifactId=plexus-demos
生成项目后,在 pom.xml
加入所需的依赖包:
1
<
dependencies
>
2
<
dependency
>
3
<
groupId
>org.codehaus.plexus</
groupId
>
4
<
artifactId
>plexus-container-default</
artifactId
>
5
<
version
>1.0-alpha-10</
version
>
6
</
dependency
>
7
</
dependencies
>
Plexus与Spring的IoC容器在设计模式上几乎是一致的,只是语法和描述方式稍有不同。在Plexus中,有ROLE的概念,相当于Spring中的一个Bean。我们首先来通过接口定义一个role:
01
package
demo.plexus-demos;
02
03
public
interface
Cheese
04
{
05
/** The Plexus role identifier. */
06
String ROLE = Cheese.
class
.getName();
07
08
/**
09
* Slices the cheese for apportioning onto crackers.
10
* @param slices the number of slices
11
*/
12
void
slice(
int
slices );
13
14
/**
15
* Get the description of the aroma of the cheese.
16
* @return the aroma
17
*/
18
String getAroma();
19
}
然后做一个实现类:
01
package
demo.plexus-demos;
02
03
public
class
ParmesanCheese
04
implements
Cheese
05
{
06
public
void
slice(
int
slices )
07
{
08
throw
new
UnsupportedOperationException(
"No can do"
);
09
}
10
11
public
String getAroma()
12
{
13
return
"strong"
;
14
}
15
}
接下来是在xml文件中定义依赖注入关系。这一点和Spring的ApplicationContext是几乎一样的,只不过Plexus的xml描述方式稍有不同。另外,Plexus默认会读取项目的classpath的META-INF/plexus/components.xml,因此我们在项目中创建 src/main/resources/META-INF/maven
目录,并将配置文件components.xml放置于此。配置文件的内容如下:
1
<
component-set
>
2
<
components
>
3
<
component
>
4
<
role
>demo.plexus-demos.Cheese</
role
>
5
<
role-hint
>parmesan</
role-hint
>
6
<
implementation
>demo.plexus-demos.ParmesanCheese</
implementation
>
7
</
component
>
8
</
components
>
9
</
component-set
>
大功告成,接下来只需要做一个使用Cheese组件的类来试用一下:
01
import
org.codehaus.plexus.PlexusContainer;
02
import
org.codehaus.plexus.PlexusContainerException;
03
04
public
class
App
05
{
06
public
static
void
main(String args[])
throws
Exception
07
{
08
PlexusContainer container=
new
DefaultPlexusContainer();
09
container.dispose();
10
11
Cheese cheese = (Cheese) container.lookup( Cheese.ROLE,
"parmesan"
);
12
System.out.println(
"Parmesan is "
+ cheese.getAroma() );
13
}
14
}
- Plexus,Spring之外的IoC容器
- Plexus——Spring之外的IoC容器
- spring的Ioc容器
- Spring的IoC容器
- spring的IOC容器
- Spring 的IOC 容器
- 模仿spring的IOC容器
- Spring 的 IOC 容器讲解
- Spring IOC容器的实现
- Spring-IOC容器的配置
- spring ioc容器的注入
- Spring框架的IOC容器
- Spring的IoC容器实现
- Framework之外的IoC
- Spring 的 IOC 容器和 SpringMVC 的 IOC 容器 关系
- Spring 的 IOC 容器和 SpringMVC 的 IOC 容器 关系
- Spring 的 IOC 容器和SpringMVC 的IOC容器
- Spring IoC容器和SpringMVC IoC容器的关系
- 常用正则表达式大全
- 脚本语言
- HDOJ 1134: Game of Connections
- 防止摄像机穿透地面
- Gdi+ DrawImage OutOfMemory 问题原因分析
- Plexus,Spring之外的IoC容器
- 一步一学Linux与Windows 共享文件Samba
- Symbian使用TTime类获取系统时间并转换为描述符
- 常用js验证
- Flash 平台技术的优化(十六) 将应用程序分为多个 SWF 文件
- 命令行参数解析: getopt()和getopt_long()
- 常用的正则表达式
- 关于“Base 一种Acid的替代方案”
- 判断当前网络是否连通?