`
seadragonnj
  • 浏览: 59052 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

深入研究xwork(-)

阅读更多
一直想通过研究别人好的代码来提高自己的水平,可是一直没有坚持下去,Hibernate看了几天实在看不明白放弃了,roller、jive也是半途而废,基本什么也没有学到,甚至可以说根本就没看明白,这次又做出学习xwork的决定,同时决定把学习的过程和学习成果写出来,也算是对自己的一个督促吧,
关于xwork我就不介绍了,网上多的是(关键是我自己的功课也没做好),
废话不说了!!!!把这两天看的东西写下来,先重一个例子说起,
1.随便写两个接口(我真的是随便写的,呵呵):
java 代码
  1. interface IPerson {
  2. public void say();
  3. }
  4. interface IUserPerson {
  5. public void say();
  6. }
2.它们的实现类
java 代码
  1. public class Person implements IPerson{
  2. public Person(){}
  3. public void say(){
  4. System.out.println("person");
  5. }
  6. }
  7. /////////////////////////////////////////////
  8. public class UserPerson implements IUserPerson{
  9. private IPerson person;
  10. public IPerson getPerson() {
  11. return person;
  12. }
  13. //这个注释就是说明需要依赖注入的
  14. @Inject
  15. public void setPerson(IPerson person) {
  16. this.person = person;
  17. }
  18. public void say(){
  19. System.out.println("userperson");
  20. person.say();
  21. }
  22. }
3.最后一步:!!!
java 代码
  1. import com.opensymphony.xwork2.inject.Container;
  2. import com.opensymphony.xwork2.inject.ContainerBuilder;
  3. public class ContainerTest {
  4. private Container container;
  5. public static void main(String[] args) {
  6. ContainerTest test=new ContainerTest();
  7. // test.setContainer(new ContainerBuilder().factory(ActionProxyFactory.class, DefaultActionProxyFactory.class).create(true));
  8. test.setContainer(new ContainerBuilder().factory(IPerson.class,Person.class).factory(IUserPerson.class,UserPerson.class).create(true));
  9. Container container=test.getContainer();
  10. IUserPerson person=container.getInstance(IUserPerson.class);
  11. person.say();
  12. }
  13. public Container getContainer() {
  14. return container;
  15. }
  16. public void setContainer(Container container) {
  17. this.container = container;
  18. }
下面对这个例子进行深入解析:
先来看一下在
java 代码
  1. new ContainerBuilder()
这个对象是发生了什么
java 代码
  1. public ContainerBuilder() {
  2. // In the current container as the default Container implementation.
  3. factories.put(Key.newInstance(Container.class, Container.DEFAULT_NAME),
  4. CONTAINER_FACTORY);
  5. // Inject the logger for the injected member's declaring class.
  6. factories.put(Key.newInstance(Logger.class, Container.DEFAULT_NAME),
  7. LOGGER_FACTORY);
  8. }
factories是一个Map类型的变量

这两行代码的目的就是把一个ContainerImpl的实现放到这个Map中(实际上并没有new一个对象,只有在用到的时候这个对象才个真正的实例化,在这里只是放入一些必要信息)。
关键来看一下factory(...)方法:
在factory(..)执行的过程中,它会执行
java 代码
  1. final InternalFactoryextends T> scopedFactory =
  2. scope.scopeFactory(key.getType(), key.getName(), factory);
  3. factories.put(key, scopedFactory);
这段代码,它就是把一些创建对象的必要信息放到factories中,
Key也是用来保存信息的,通过Key.newInstance(type, name)来创建一个Key对象,这里的type就是上面传入的IPerson.class,在这里有一个重要的地方就是factory的创建,它是通过下面的代码完成的
java 代码
  1. InternalFactoryextends T> factory = new InternalFactory<t>() { </t>
  2. volatile ContainerImpl.ConstructorInjectorextends T> constructor;
  3. @SuppressWarnings("unchecked")
  4. //这个方法在调用ContainerImpl中的getInstance时会被调用
  5. public T create(InternalContext context) {
  6. if (constructor == null) {
  7. this.constructor =
  8. context.getContainerImpl().getConstructor(implementation);
  9. }
  10. return (T) constructor.construct(context, type);
  11. }
  12. public String toString() {
  13. return new LinkedHashMap
  14. put("type", type);
  15. put("name", name);
  16. put("implementation", implementation);
  17. put("scope", scope);
  18. }}.toString();
  19. }
  20. };
这里的关键就是create(..)这个方法的实现,将来在实例化对象的时候会用到!
分享到:
评论
1 楼 liuyuanhui0301 2012-07-25  
 

相关推荐

    xwork-assembly-2.1.6-src

    深入研究xwork-2.1.6-src,我们可以学习到以下核心知识点: 1. **Action管理**:xwork如何创建、初始化和管理Action实例,以及如何通过ActionContext传递请求上下文信息。 2. **拦截器机制**:xwork的拦截器链是...

    xwork-core-2.1.6源代码

    通过深入研究xwork-core-2.1.6的源代码,开发者不仅可以掌握Struts2的核心概念和工作流程,还能学习到设计模式、并发控制、性能优化等方面的实践知识。这将极大地提高我们解决实际问题的能力,使我们能更好地应对...

    xwork-core-2.2.1-sources

    《深入解析xwork-core-2.2.1-sources》 xwork-core是Struts2框架的核心组件之一,它在Web应用开发中扮演着至关重要的角色。本文将深入探讨xwork-core-2.2.1-sources中的核心概念、功能以及源代码分析,帮助开发者更...

    struts-xwork-core源码

    在深入探讨Struts-xwork-core源码之前,我们需要了解一些基本概念。Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架,它的目标是简化开发并提供更强大的控制层。XWork则是Struts2的基础,...

    xwork-core-2.1.6.jar

    《深入解析xwork-core-2.1.6:核心组件与源码剖析》 xwork-core-2.1.6是Struts2框架的核心库,它为基于Action的MVC设计模式提供了强大的支持。这个版本的发布对于理解Struts2的工作机制至关重要。本文将深入探讨...

    xwork-core-source-2.3.1.2源码

    通过对xwork-core-source-2.3.1.2源码的深入研究,开发者可以更好地理解Struts2的工作原理,提高代码的维护性和扩展性。源码中的注释和设计模式为学习和调试提供了宝贵的资源,使得开发者能够定制化框架,满足特定...

    xwork-2.0.5-src

    通过对`xwork-2.0.5`源代码的深入研究,开发者不仅可以掌握Struts2的核心运作机制,还能更好地优化应用性能,解决实际问题。同时,这也为理解和学习其他基于XWork的框架(如Struts2)奠定了坚实的基础。 总之,`...

    xwork-2.0.4 源码

    通过对xwork-2.0.4源码的深入研究,我们可以理解其背后的架构设计和工作原理,从而更好地利用这个框架来构建高效、可维护的Web应用。无论是Action、Interceptor还是ActionContext,每一个组件都是为了实现更灵活、更...

    xwork-2.1.2 源码

    通过深入研究XWork-2.1.2的源码,开发者不仅可以了解其设计理念和实现方式,还能掌握如何自定义拦截器、处理动作流、优化数据绑定等高级技巧,这对于提升Java Web开发技能和理解Struts2框架具有重要意义。...

    xwork-2.1.2-sources

    总的来说,研究"xwork-2.1.2-sources"这个压缩包中的源码,能让我们深入理解Struts2的底层工作原理,提高开发效率,同时也有助于我们进行更高效的故障排查和性能优化。对于任何希望成为Java Web开发高手的人来说,...

    xwork-2.0.4源码

    通过对xwork-2.0.4源码的深入研究,开发者不仅可以掌握Struts2框架的内部运作机制,还能提高问题定位和性能优化的能力,同时激发对设计模式和面向切面编程的深入理解。这是一次宝贵的代码学习之旅,对于任何希望提升...

    xwork-2.0.7jar

    《深入解析xwork-2.0.7:框架与源码探索》 xwork-2.0.7是一个重要的Java框架,它在Web应用开发领域扮演着不可或缺的角色。...对于有志于深入研究Web应用开发的程序员来说,xwork-2.0.7无疑是一份宝贵的资源。

    xwork-2.2.1源文件

    《深入解析xwork-2.2.1源代码》 xwork-2.2.1是Struts2框架的核心组成部分,它提供了Action处理、类型转换、数据校验、国际化等...深入研究源代码,不仅可以提升开发技能,也能帮助我们更好地应对实际项目中的问题。

    xwork-2.0.5+src.rar

    `xwork-2.0.5+src.rar`这个压缩包包含了XWork的源码和相关的JAR包,对于深入理解Struts2的工作原理和进行定制化开发具有重要价值。 1. **XWork框架** XWork是一个独立的框架,它提供了一种基于OGNL(Object-Graph ...

    xwork-2.1.2-all源代码

    总之,对xwork-2.1.2-all源代码的深入研究,不仅可以增强对Struts2框架的理解,还能为实际项目开发提供强大的理论支撑。通过实践和学习,开发者可以更好地运用xwork的特性,打造高效、稳定的Java Web应用程序。

    xwork-2.1.2-all.zip

    《深入剖析xwork-2.1.2:构建强大的Struts2.0应用程序》 xwork-2.1.2-all.zip是一个包含了xwork库2.1.2版本的完整源代码压缩包...通过深入研究这个源码包,我们可以提升自己的技能,成为一名更优秀的Java Web开发者。

    xwork-2.0.4-src

    《深入解析xwork-2.0.4源代码》 xwork-2.0.4-src,这是一个关于OpenSymphony组织开发的xwork框架的源码版本。xwork作为一个核心的业务逻辑处理框架,它是Struts 2的基础,对Java Web开发有着深远的影响。这个zip...

    xwork-2.1.3 source

    总的来说,深入研究`xwork-2.1.3`源码,不仅可以提升对这个框架的理解,也能增进对Java Web开发的整体认识。从源码中学习设计模式,理解框架的工作原理,以及如何通过Maven进行构建和测试,都将对我们的开发技能带来...

    xwork-2.1.6.rar

    `com.opensymphony.xwork2.DefaultActionInvocation`和`com.opensymphony.xwork2.DefaultActionProxy`中的异常处理代码值得深入研究。 8. **国际化与本地化** XWork支持多语言环境,它通过`...

Global site tag (gtag.js) - Google Analytics